Pandas 的数据结构
Pandas有两个主要的数据结构:Series和DataFrame。
Series类似于一维数组的对象,它是由一组数据和与之相关的数据标签组成的。
DataFrame就像一个2维数组一样,只是它每一行每一列都有名字,这样它也就能更简单的进行应用了。
Series 的创建
In: s_obj = Series([4,7,2,-5], index=['d','b','a','c'])
Out:
d 4
b 7
c 2
a -5
DataFrame 的创建
DataFrame 是panda的一个典型的数据结构,它既有行索引又有列索引,每一列都可以看成一个独立的Series对象。可以通过下面的办法建立一个DataFrame
def GetDataFrame():
data = DataFrame(np.arange(16).reshape((4,4)),
index = ['ohio', 'colorado', 'utah', 'new york'],
columns = ['one', 'two', 'three', 'four'])
return data
这个DataFrame的输出是像下面这样的:
DataFrame 的行索引和列索引
行索引:
In: df_obj.ix['ohio']
列索引:
In: df_obj.one
Series和DataFrame的一些基本功能
axis=1 的应用
f = lambda x: x.max() - x.min()
df_obj.apply(f) 对行进行操作 等价于 df_obj.applay(f, axis=0)
df_obj.apply(f, axis=1) 对列进行操作
重新索引以及自动填充
In: s_obj = Series([4.5,7.2,-5.3,3.6], index=['d','b','a','c'])
In: s_obj.reindex(['a','b','c','d','e'])
Out:
a -5.3
b 7.2
c 3.6
d 4.5
e NaN
In: s_obj3 = Series(['blue', 'purple', 'yellow'], index=[0,2,4])
In: s_obj3.reindex(range(6), method='ffill')
Out:
0 blue
1 blue
2 purple
3 purple
4 yellow
5 yellow
states = ['two','one','three','four']
df_obj.reindex(columns=states)
删除指定轴上的项
s_obj.drop('c')
s_obj.drop(['d','c'])
df_obj.drop(['colorado', 'ohio']) 删除两行
df_obj.drop('two', axis=1) 删除某一列
索引 选取和过滤
s_obj['b':'c'] 片索引
df_obj['two'] 选取单个列
df_obj[['three','one']] 选取一组列
df_obj.ix[:, 'two'] 选取单个列 (上面的两个列操作可以用这个ix方法)
df_obj.ix['ohio'] 选取单行
df_obj.ix['ohio', ['one','two']] 选取单个行两个列
所以终结下来,DataFrame的行列索引操作可以用一个ix方法实现。
obj.ix[val] 不加逗号表示选取一个行
obj.ix[:,val] :,表示选所有的行,再选列
obj.ix[val1,val2] 同时选取行和列
排序和排名
按行或列的索引进行排序
df_obj.sort_index() 对行索引排序,按升序排。
df_obj.sort_index(axis=1) 对列索引排序
df_obj.sort_index(axis=1, ascending=False) 按降序排
按值进行排序
s_obj.order()
df_obj.sort_index(by='three') 按哪列的值进行排序就by哪列名
DataFrame与Series之间的运算
Out: df_obj
b d e
utah 0 1 2
ohio 3 4 5
texas 6 7 8
In: s_obj = df_obj.ix[0]
Out: s_obj
b 0
d 1
e 2
Name: utah
In: df_obj - s_obj
Out:
b d e
utah 0 0 0
ohio 3 3 3
texas 6 6 6
唯一性
df_obj.index.is_unique
df_obj.columns.is_unique
添加一列
s_obj_new = Series([-1.2,-1.5,-2], index=['ohio', 'colorado', 'utah', 'new york'])
df_obj['five'] = s_obj_new 创建一新列名为five
添加一行
s_obj_new = Series([1,2,3,4], index=['one','two','three','four'])
df_obj.ix['london'] = s_boj_new
求和
df_obj.sum() 求每列的和
df_obj.sum(axis=1) 求每行的和
df_obj.mean() 每列的平均值
df_obj.mean(axis=1) 每行的平均值
统计汇总
df_obj.describe()
相关性 correlation
df_obj.two.corr(df_obj.three)