pandas 数据结构介绍
两种数据结构:Series 和 DataFrame;
Series
由一组数据和与之相关的一组数据标签(索引)组成,可以用 index 和 value 分别规定索引和值,若不规定索引,默认自动创建 0 到 N-1 的索引
import pandas as pd
s1 = pd.Series([1,2,3], index=['a','b','c']) # Series可以设置索引,有点像字典
#print(s1)
#print(s1.values) # Series的值
#print(s1.index) # Series的索引
#print(s1.['a']) # 根据索引取值
#print(s1[['a','b']]) # 根据索引取值
# 'b' in s1
# 'a' in s1
>>> dict = {'a':1,'b':2,'c':3}
>>> s2 = pd.Series(dict) # 可以用字典直接创建Series
# Series 中的索引就是原字典的键(有序排列)
>>> print(s2)
a 1
b 2
c 3
-
Series缺失值
dict = {'a':1,'b':2,'c':3} status = ['a','b','c','d'] s3 = pd.Series(dict,index=status) print(s3)
该例中,dict 和 status 索引相匹配的三个值会被找出来并放到相应位置,但由于 ‘d’ 所对应的 dict 值找不到,所以其结果就是 NaN(即“非数字”(not a number),在pandas中,它用于表示缺失或NA值);pandas 的 isnull 和 notnull函数可用于检测缺失数据:
Series 也有类似的实例方法:
-
Series数据对齐
对于许多应用而言,Series 最重要的一个功能就是:它在算术运算中会自动对齐不同索引的数据>>> s3 >>> s2 a 1.0 a 1 b 2.0 b 2 c 3.0 c 3 d NaN # >>> s3 + s2 a 2.0 b 4.0 c 6.0 d NaN
-
Series索引修改
Series 的索引可以通过赋值的方式修改:>>> s3.index=['甲','乙','丙','丁'] >>> print(s3) 甲 1.0 乙 2.0 丙 3.0 丁 NaN
DataFrame
DataFrame 是一种表格型结构,含有一组有序列,每列可以是不同的数据类型。即有行索引,也有列索引,可看做是由 Series 组成的字典(使用共同的索引)
#构建DataFrame可以直接传入等长的列表或Series组成的字典
#不等长会产生错误
data = {
'year' : [15,16,17,18],
'income' : [100,200,300,400],
'pay' : [500,400,300,200]
}
df1 = pd.DataFrame(data) # 是按照列名进行列排序
df2 = pd.DataFrame(data,columns=['income','year','pay'] # 指定列后就按指定的列排序
print(df1)
print(df2)
df1.columns # 列
df1.index # 行
df1.value # 值
# 可以有空列,index是行名
df3 = DataFrame(data,columns=['a','b','c','d'],index = ['one','two','three'])
print df3['a'] #用字典方式取列数据
print df3.b
#列数据的修改直接选出来重新赋值即可
print df3.ix['two'] #行,可以用行名或者行数来进行选取
#为列赋值,如果是Series,规定了index后可以精确赋值
df3['d'] = Series([100,200,300],index = ['two','one','three'])
print df3
del df3['d'] #删除列用del 函数
其他:
df1.describe() # 数据描述
df1.sort_index(axis=1) # 列排序
df1.sort_index(axis=0) # 行排序
df1.sort_values(by='year') # 排序year列的值