from pandas import Series,DataFrame
import pandas as pd
数据结构
☆Series
最重要功能是在算数运算中会自动对齐不同索引的数据
data = Series(l,index=([])) #l可为列表,若不指定index,默认0-(len(l)-1);也可为字典,index自动有序排列,不指定index,则索引为key,第二列为value,指定索引后,会返回匹配上的对,没有匹配上的索引后是NaN
Series的属性:
data.values #第二列
data.index #第一列,可通过赋值方式就地修改
data.name #指定后出现在最后一行
data.index.name #指定后出现在第一行
Series的方法:
data.isnull() #是否为缺失值,返回布尔值
☆DataFrame
可看做共用一组索引的的Series组成的字典
frame = DataFrame(data,columns=[])#data可为字典,后者指定列的排列顺序
frame['col'];frame.col
frame.columns#列名属性
del frame['']#删除列
frame.index.name= ;frame.columns.name= ;frame.values
data还可以是嵌套字典,外层字典的键为列,内层的键作为行索引
☆索引对象
Index对象不可修改
基本功能
☆重新索引
obj.reindex(data,method='ffill')#ffill前向值填充,bfill后向值填充,还可以直接定义值fill_value=xxx
☆丢弃指定轴上的项
frame.drop('');frame.drop([,],axis=1)#默认丢弃行,可以指定轴
☆索引、选取和过滤
索引
可根据index或序号索引
In [14]: data = DataFrame(np.arange(16).reshape((4,4)),index = ['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
In [15]: data
Out[15]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
In [16]: data[1:3]
Out[16]:
one two three four
Colorado 4 5 6 7
Utah 8 9 10 11
In [17]: data['Colorado':'New York']#利用标签的切片运算与普通的Python切片运算不同,其末端是包含的
Out[17]:
one two three four
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
loc——通过行标签索引行数据
iloc——通过行号索引行数据
ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合)
同理,索引列数据也是如此!
In [48]: data.loc[:,'two':'three']
Out[48]:
two three
Ohio 1 2
Colorado 5 6
Utah 9 10
New York 13 14
In [49]: data.iloc[:,1:2]
Out[49]:
two
Ohio 1
Colorado 5
Utah 9
New York 13
In [43]: data.loc['Ohio':'Utah']
Out[43]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
In [44]: data.iloc[0:2]
Out[44]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
算术运算方法
.add()
.sub()
.div()
.mul()
默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播
如果希望匹配行并在列上广播,则必须使用算术运算方法。
排序和排名
Series
按索引排序:obj.sort_index()
按值排序:obj.order()
DataFrame
按索引排序:obj.sort_index(axis=0,ascending=False)
按值排序:obj.sort_index(by='')#列名,根据该列的值排序
汇总和计算描述统计
Series的corr方法用于计算两个Series中重叠的,非NA的,按索引对齐的值的相关系数。
s1.corr(s2)
DataFrame的corr方法将以DataFrame的形式返回完整的相关系数矩阵
df.corr()
利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数
df1.corrwith(df2)#默认按列
处理缺失数据
NA处理方法np.nan
dropna
fillna
isnull
notnull
In [87]: df = DataFrame(np.random.randn(7,3))
In [89]: df.ix[:4,1]=np.nan
In [90]: df.ix[:2,2]=np.nan
In [91]: df
Out[91]:
0 1 2
0 0.396967 NaN NaN
1 0.046879 NaN NaN
2 -0.659653 NaN NaN
3 -0.567351 NaN -1.396844
4 0.493285 NaN -1.226272
5 1.248757 1.182155 1.816061
6 -0.551892 -0.256985 0.758178
In [92]: df.dropna()#默认只要含NA就丢弃
Out[92]:
0 1 2
5 1.248757 1.182155 1.816061
6 -0.551892 -0.256985 0.758178
In [93]: df.dropna(how='all')#用how全部为NA的才丢弃
Out[93]:
0 1 2
0 0.396967 NaN NaN
1 0.046879 NaN NaN
2 -0.659653 NaN NaN
3 -0.567351 NaN -1.396844
4 0.493285 NaN -1.226272
5 1.248757 1.182155 1.816061
6 -0.551892 -0.256985 0.758178
In [95]: df.dropna(thresh=2)#丢弃非NA数小于2的
Out[95]:
0 1 2
3 -0.567351 NaN -1.396844
4 0.493285 NaN -1.226272
5 1.248757 1.182155 1.816061
6 -0.551892 -0.256985 0.758178
填充缺失数据
_=df.fillna(x,inplace=True)
df.fillna(method='ffill',limit=2)#limit是向前向后可以连续填充的最大数量
层次化索引
data = Dataframe(data,index=[[],[]],columns=[[],[]])#MultiIndex
网友评论