Pandas 是python的数据分析库,让数据处理变得非常简单,处理速度上也有很多优化,比python 的内置方法相比有很大的优势。
先学两个网站:
- python data analysis library
- 十分钟入门Pandas:10 Minutes to pandas
- [Pandas函数使用总结](https://mp.weixin.qq.com/s/jCRTBteONIBDmvpieQlP6A)
约定俗成导入:
from pandas import Series,DataFrame
Series可以存储任意数据类型:
- 是一位标记数组,numpy的一位array;
- Python基本数据结构list
DataFrame是二维标记数据结构,列可以是不同的数据类型,可接收多种输入
s = pd.Series([1,3,5,np.nan,6,8])
df=pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
查看检查数据
df.dtypes : 查看不同的数据类型:
df.head(), df.tail(3):查看frame的头和尾:
df.index,df.columns,df.values: 显示索引,列和底层的numpy数据
df.describe(): 快速统计
df.T :对数据转置
df.sort_index(axis=1, ascending=False): 按轴排序
df.sort_values(by='B'): 按值排序
选择数据,推荐使用经过优化的pandas的数据访问方式:.at,.iat,.loc和.ix
- 直接获取
df['A']:返回单独的一列,等同于df.A
df[0:3]: 前三行,第一行是索引
- 通过标签选择
- 获取一个交叉区域
df.loc[dates[0]]
- 在多轴上选择
df.loc[:,['A','B']]
- 通过位置选择
- 传递数值(行)df.iloc[3]
- 数值切片 df.iloc[3:5,0:2]
- 指定位置的列表 df.iloc[[1,2,4],[0,2]]
- 对行进行切片 df.iloc[1:3,:]
- 对列进行切片 df.iloc[:,1:3]
- 获取特定的值 df.iloc[1,1] == df.iat[1,1]
- 布尔索引
- 一个单独列来过滤 df[df.A > 0]
- where过滤:> df[df.A > 0]
- isin()过滤:
设置
- 加一个新的列:
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
df['F'] = s1
- 标签:df.at[dates[0],'A'] =0
- 位置:df.iat[0,1] = 0
- numpy数组:df.loc[:,'D'] = np.array([5] * len(df))
- where操作:
df2 = df.copy()
df2[df2 > 0] = -df2
缺失值处理
在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中。
- reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1
- 去掉包含缺失值的行:
df1.dropna(how='any')
- 对缺失值进行填充:
df1.fillna(value=5)
- 对数据进行布尔填充:
pd.isnull(df1)
应用数据
- 应用统计函数: df.apply(lambda x: x.max() - x.min())
- 直方图统计: s.value_counts()
- Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素: s.str.lower()
合并
Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。
- Concat :
pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)
- Join 类似于SQL类型的合并
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')
- Append 将一行连接到一个DataFrame上
df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s, ignore_index=True)
分组
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
-(Splitting)按照一些规则将数据分为不同的组;
-(Applying)对于每组数据分别执行一个函数;
-(Combining)将结果组合到一个数据结构中;
df.groupby('A').sum()
df.groupby(['A','B']).sum()
重塑
- stack()方法在DataFrame列的层次上压缩
- 整合DataFrame或者Series(MultiIndex作为索引),stack()的逆运算是unstack(),默认情况下unStack上一次的情况。
- 透视表
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
网友评论