导入 pandas、numpy、matplotlib
1 | In [1]: import pandas as pd |
创造对象
Series 是一个值的序列,它只有一个列,以及索引。下面的例子中,就用默认的整数索引
1 | In [4]: s = pd.Series([1,3,5,np.nan,6,8]) |
DataFrame 是有多个列的数据表,每个列拥有一个 label,当然,DataFrame 也有索引
1 | In [6]: dates = pd.date_range('20130101', periods=6) |
如果参数是一个 dict,每个 dict 的 value 会被转化成一个 Series
1 | In [10]: df2 = pd.DataFrame({ 'A' : 1., |
每列的格式用 dtypes 查看
1 | In [12]: df2.dtypes |
你可以认为,DataFrame 是由 Series 组成的
1 | In [13]: df2.A |
查看数据
用 head 和 tail 查看顶端和底端的几列
1 | In [14]: df.head() |
实际上,DataFrame 内部用 numpy 格式存储数据。你也可以单独查看 index 和 columns
1 | In [16]: df.index |
describe()
显示数据的概要。
1 | In [19]: df.describe() |
和 numpy 一样,可以方便的得到转置
1 | In [20]: df.T |
对 axis 按照 index 排序(axis=1
是指第二个维度,即:列,axis=0
是指第一个维度,即:行)
1 | In [21]: df.sort_index(axis=1, ascending=False) #ascending=False 默认为True,升序 |
按值排序
1 | In [22]: df.sort_values(by='B') #也可以是by=['A','B'],按2列排序 |
选择
注意,以下这些对交互式环境很友好,但是作为 production code 请用优化过的
.at
,.iat
,.loc
,.iloc
和.ix
获取行/列
从 DataFrame 选择一个列,就得到了 Series
1 | In [23]: df['A'] |
和 numpy 类似,这里也能用 []
选择行
1 | In [24]: df[0:3] |
通过 label 选择
还可以多选
1 | In [27]: df.loc[:,['A','B']] #所有行,AB列 |
注意那个冒号,用法和 MATLAB 或 NumPy 是一样的!所以也可以这样
1 | In [28]: df.loc['20130102':'20130104',['A','B']] |
1 | In [29]: df.loc['20130102',['A','B']] |
如果对所有的维度都写了标量,不就是选出一个元素吗?
如果对所有的维度都写了标量,不就是选出一个元素吗?
1 | In [30]: df.loc[dates[0],'A'] |
这种情况通常用 at
,速度更快
1 | In [31]: df.at[dates[0],'A'] |
通过整数下标选择
这个就和数组类似啦,直接看例子。选出第3行:(注意有第0行)
1 | In [32]: df.iloc[3] |
选出3~4行,0~1列:
1 | In [33]: df.iloc[3:5,0:2] #注意 3:5 是第3行到第4行,尾数在python中是不选择的(有第0行) |
也能用 list 选择
1 | In [34]: df.iloc[[1,2,4],[0,2]] |
对应单个元素
1 | In [37]: df.iloc[1,1] |
总结:df.icol
是按下标选择,df.col
是按标签选择。
通过布尔值下标
基本用法
1 | In [39]: df[df.A > 0] |
多条件
1 | In [39]: df[(df.A > 0)&(df.A <1)] |
不满足条件的填充为: NaN
1 | In [40]: df[df > 0] |
isin()
函数:是否在集合中
1 | In [41]: df2 = df.copy() |
contains()
函数:是否包含特定字符
1 | In [44]:tips |
删除数据
丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象:
1 | In [110]: data = pd.DataFrame(np.arange(16).reshape((4, 4)), |
用标签序列调用drop会从行标签(axis 0)删除值:
1 | In [112]: data.drop(['Colorado', 'Ohio']) |
通过传递axis=1或axis=’columns’可以删除列的值:
1 | In [113]: data.drop('two', axis=1) |
读取、写入数据
CSV
写入
1 | In [136]: df.to_csv('foo.csv') |
读取
1 | In [137]: pd.read_csv('foo.csv') |
table
读取
1 | data = pd.read_table('example.txt',sep='\t',header=0) |
excel
写入
1 | In [140]: df.to_excel('foo.xlsx', sheet_name='Sheet1') |
读取
1 | In [141]: pd.read_excel('foo.xlsx', sheet_name='Sheet1', index_col=None, na_values=['NA']) |