pandas自我学习总结

基本用法

生成时间序列

pd.date_range(start='20130101', end='20131231', freq='D')

生成数据框

pd.DataFrame(np.random.randn(12,4), index=dates, columns=list('ABCD'))

排序

#一般排序
df.sort_index(axis=0, ascending=False,inplace=True)
dff.sort_values(by=['A','B'], ascending=[True, False]) # A升序B降序   
#reindex指定序列排序,对行列根据索引按指定序列排序
frame.reindex(index=[],columns=[])

切片选择行列

df.loc[:, ['A', 'C']]     # 选择多列,等价于df[['A', 'C']]
df.loc[['zhang', 'zhou'], ['A', 'D', 'E']]# 同时指定多行与多列进行选择
df.iloc[0:3, 0:4] # 查询前3行、前4列数据
df[df.A>50] # 按给定条件进行查询
df[df['E']=='test'] # 按给定条件进行查询
df[df['A'].isin([20,69])]# 按给定条件进行查询

数据合并merge函数

>>> df1
   a   b   c
0  0  50  60
1  1  51  61
2  2  52  62
3  3  53  63
4  4  54  64
>>> df3
   a   d
0  3  30
1  4  31
2  5  32
3  6  33
4  7  34
>>> pd.merge(df1, df3)                      # 内连接
   a   b   c   d
0  3  53  63  30
1  4  54  64  31
>>> pd.merge(df1, df3, how='right')         # 右连接
   a     b     c   d
0  3  53.0  63.0  30
1  4  54.0  64.0  31
2  5   NaN   NaN  32
3  6   NaN   NaN  33
4  7   NaN   NaN  34
>>> pd.merge(df1, df3, how='left')          # 左连接
   a   b   c     d
0  0  50  60   NaN
1  1  51  61   NaN
2  2  52  62   NaN
3  3  53  63  30.0
4  4  54  64  31.0
>>> pd.merge(df1, df3, how='outer')    # 外连接
   a     b     c     d
0  0  50.0  60.0   NaN
1  1  51.0  61.0   NaN
2  2  52.0  62.0   NaN
3  3  53.0  63.0  30.0
4  4  54.0  64.0  31.0
5  5   NaN   NaN  32.0
6  6   NaN   NaN  33.0
7  7   NaN   NaN  34.0

replace函数

data.replace(1, 5)     # 把所有1替换为5
data.replace([1,2],[5,6])     # 1->5,2->6
data.replace({1:5, 'one':'ONE'})  # 使用字典指定替换关系

删除插入行列

data.drop(5, axis=0)      # 删除指定行
data.drop(3, inplace=True)      # 原地删除
data.drop('k1', axis=1)   # 删除指定列
data.insert(1,'lai',date) #在第二列插入lai

数据操作,类似Excel

# 替换数据
df['C'] = -df['C']    # 对指定列数据取反
df.nlargest(3, ['C']) # 返回指定列最大的前3行
dff[dff.sum(axis=1)==11] #所有求和(行求和)等于特定值的行
dff.loc[dff['C']==-3.0, 'D'] #C=-3的D
data['rank'] = data['age'].rank()  # 增加一列位次序号,ascending,method参数
# 行列求和
>>> dff['ColSum'] = dff.apply(sum, axis=1)     # 对行求和,增加1列
>>> dff.loc['RowSum'] = dff.apply(sum, axis=0) # 对列求和,增加1行

映射

data['k1'] = data['k1'].map(str.upper)  # 使用函数进行映射
data['k1'] = data['k1'].map({'ONE':'one', 'TWO':'two'})   # 使用字典表示映射关系
data['k2'] = data['k2'].map(lambda x:x+5)  # lambda表达式
data.index = data.index.map(lambda x:x+5)  # 修改索引
data.columns = data.columns.map(str.upper) # 修改列名(改成大写)
dff.apply(lambda x:x-x.mean(), axis=1)  # 横向计算离差
dff.applymap(lambda x:'%.1f'%x)   # 批量格式化数据(保留一位小数)
dff['B'] = dff['B'].map(lambda x:'%.1f'%x)

分组计算,透视表

df4.groupby('A').sum()          # 数据分组计算
df4.groupby(by=['A', 'B']).mean()
df4.groupby(by=['A', 'B']).aggregate({'C':np.mean, 'D':np.min}) # 分组后,C列使用平均值,D列使用最小值 
#透视表
df.pivot(index='a', columns='b', values='c')
df.pivot(index='a', columns='b')['c']
data.pivot_table('花后15天',index='品种',columns='氮水平',aggfunc='mean')
#交叉表
pd.crosstab(index=df.a, columns=df.b)
pd.crosstab(index=df.a, columns=df.b, values=df.c, aggfunc='sum', margins=True)

缺失值处理

#找出缺失值的行索引,按照一定程序替换
nan_indexset = set(np.where(np.isnan(result.iloc[:,1:]))[0])
nan_index = list(nan_indexset)

df1['G'].fillna(5, inplace=True)    # 使用指定值填充缺失值
df2.fillna({'F':'foo', 'G':df2['G'].mean()}) # 填充缺失值F行为foo,G行为均值
dft.fillna(method='pad')     # 使用缺失值前最后一个有效值进行填
dft.fillna(method='bfill')   # 使用缺失值后第一个有效值往回填充
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值