1. 创建pandas.DataFrame
- (1) 创建空的df,然后进行填充
df = pd.DataFrame()
df['id'] = [1,1,2]
df['movie'] = ['2012','The Pursuit of Happyness', 'Avatar']
- (2) 通过字典初始化DataFrame
id = [1,1,2]
movie = ['2012','The Pursuit of Happyness', 'Avatar']
df = pd.DataFrame({'id': id, 'movie': movie})
结果如下所示:
2. 修改DataFrame的列名
- (1) 直接修改columns属性
df.columns = ['id', 'movie', 'score', 'time']
- (2) 通过rename修改列名
df.rename(columns={0: 'id',1:'movie', 2:'score', 3:'time'}, inplace= True)
结果如下所示:
3. 按不同方式访问(遍历)
- (1) 按行和列名访问
df.loc[0:2, ['movie','score']]
- (2) 按第i行和第j列进行访问
df.iloc[0:2, 1:3]
结果如下所示:
4. 使用特定函数单独处理某列数据
def is_favorite(x) :
if x < 3 :
return "No"
else :
return "Yes"
df['favorite'] = df['score'].map(is_favorite)
结果如下所示:
5. 特定数据按字典进行替换
swap = {"Yes": 1, "No": 0}
df.replace(swap, inplace=True)
结果如下所示:
6. 处理时间类型数据
t = pd.DatetimeIndex(df['time'])
df['year'] = t.year
df['month'] = t.month
df['day'] = t.day
df['dayofweek'] = t.dayofweek
7. 统计某列数据值的分布
- (1) 查看各个值的数目统计
df['score'].value_counts()
- (2) 绘制直方图
import matplotlib.pyplot as plt
df['score'].value_counts().plot.bar(figsize=(15,10))
plt.show()
8. 查看某列数据的缺失率
df['score'].isnull().mean()
9. Nan数据填充
df['score'].fillna(60, inplace = True)
10. 合并DataFrame
- (1) 纵向合并
df = pd.concat([df1, df2], axis=0,ignore_index=True)
- (2) 横向合并
df = pd.merge(df, df_attr, how='left', on='id')
11. 获取满足条件的数据
- (1) 满足某个值
df.loc[df['is_favorite'] == 0]
- (2) 满足某个列表
ml = ['2012', 'Avatar']
df.loc[df['movie'].isin(ml)]
12. 去掉重复出现的数据(保留第一个)
df.drop_duplicates(subset=['id','movie'], keep='first')
以上处理是我最近参加一个推荐系统比赛过程中所使用的Pandas.DataFrame处理数据的方法,详细的函数参数及其使用方法可以通过help函数获取或通过Pandas的官方帮助文档获取。
13. 按一定顺序进行排序
df.sort_values(['moive','score'])
1.参考文档:
[1]. http://pandas.pydata.org/pandas-docs/version/0.24/pandas.pdf