pandas重索引
from pandas import DataFrame
from pandas import Series
obj = Series([1,2,3,4,5], index=['a','b','c','d','e'])
print obj
"""
输出结果为:
a 1
b 2
c 3
d 4
e 5
dtype: int64
"""
obj = obj.reindex(['b','a','c','d','e'])
print obj
"""
输出结果为:
b 2
a 1
c 3
d 4
e 5
dtype: int64
"""
如果重索引传入的索引号原在原索引中并不存在则引入空值
obj = obj.reindex(['a','b','c','d','e','f'])
print obj
"""
输出结果为:
a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
f NaN
dtype: float64
"""
我们可以控制这个引入的值是什么,默认是NaN,可以通过fill_value参数更改
obj = obj.reindex(['a','b','c','d','e','f','1'], fill_value=0)
print obj
"""
输出结果为:
a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
f NaN
1 0.0
dtype: float64
"""
函数应用和映射
frame = DataFrame(np.random.randn(4,3))
f = lambda x: x.max() - x.min()
print frame.apply(f)
"""
输出结果为:
0 1.134713
1 1.048039
2 2.054689
dtype: float64
"""
元素级的Python函数也是可以用的。
frame = DataFrame(np.random(4,3))
print frame
"""
输出结果为:
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
"""
format = lambda x: x+x
print frame.applymap(format)
"""
输出结果为:
0 1 2 3 4
0 0 2 4 6 8
1 10 12 14 16 18
2 20 22 24 26 28
"""
以上这些不只是可以使用lambda表达式,还可以使用def函数
排序和排名将会是我们比较常用的两种操作
obj = Series(range(4), index=['d', 'a', 'b', 'c'])
print obj.sort_index()
"""
a 1
b 2
c 3
d 0
dtype: int64
"""
面对DataFrame,则可以根据任意一个轴上的索引进行排序:
frame = DataFrame(np.arange(8).reshape(2,4), index=['three', 'one'],
columns = ['d','a','b','c'])
print frame.sort_index()
"""
输出结果为:
d a b c
one 4 5 6 7
three 0 1 2 3
"""
print frame.sort_index(axis=1)
"""
a b c d
three 1 2 3 0
one 5 6 7 4
"""
数据默认是按升序排序的,但也可以降序排序
print frame.sort_index(axis=1, ascending=False)
"""
输出结果为:
d c b a
three 0 3 2 1
one 4 7 6 5
"""
sort_values方法可以对Series进行按值排序
obj = Series([4,7,5,6,2])
print obj.sort_values()
"""
输出结果为:
4 2
0 4
2 5
3 6
1 7
dtype: int64
"""
在DataFrame中你可以指定一列使数据根据这一列进行排序
obj = DataFrame({'a':[1,2,5,4,3],'b':[2,5,4,6,1]})
print obj
print obj.sort_index(by='b')
'''
输出结果为:
a b
4 3 1
0 1 2
2 5 4
1 2 5
3 4 6
'''
你也可以通过sort_values这种方式根据多个列进行排序
obj = DataFrame({'a':[1,1,5,4,3],'b':[5,1,4,6,1]})
print obj.sort_values(by=['a','b'])
'''
输出结果为:
a b
1 1 1
0 1 5
4 3 1
3 4 6
2 5 4
'''