注意:这里只是总结出了自己常用的一些pandas数据处理方法,不是详尽的pandas使用文档,这篇博文主要是起到一个导航作用。
导入导出数据
数据导入常用的有:
将字典转为DataFrame对象
d = {"x": [1,2,3], "y": [3,2,1]}
df = pd.DataFrame(d)
读入csv文件
df = pd.read_csv("file.csv")
读入excel文件
df = pd.read_excel("file.xlsx")
更多read_xxx函数的参数可以参考官网:pandas.read_excel
数据导出常用的有:
可以导出任意类型,常用的有csv、excel
一般加上一个index=False,这样防止多出一列索引列
df.to_csv("new_file.csv", index=False)
df.to_excel("new_file.xlsx", index=False)
索引获取数据
这里就只贴官方文档链接了,主要是官方文档写太好了,实在没有必要再自己翻译过来写了
获取单个数据
在DataFrame中定位单个数据,有两种方式:
访问多行/多列数据,也有两种方式
遍历方式
遍历DataFrame
行遍历
index是索引值,row是当前索引行的数据,是Series类型
for index, row in df.iterrows():
row['column_name']
row[0]
第二种实现(推荐)
row是元组类型,默认index=True,name=Pandas,默认第一个元素是索引值
for row in df.itertuples(name="tuple",index=True):
pass
列遍历
column是当前列的数据,为Series类型
for column_name, column in df.items():
pass
第二种实现(推荐)
for column_name, column in df.iteritems():
pass
判空
DataFrame.isna()
获取一个相同尺寸的boolean值的对象,如果值是None或np.NaN会返回True。
如果想让inf
也判定为空的话需要设置:
pandas.options.mode.use_inf_as_na = True
如果想让‘’
或者全是空字符的字符串也判定为空的话可以这样:
df.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
这一段是把空字符串替换为NaN
tips:isna
还有个别名叫isnull
清洗空值
这里指的空为:None
、numpy.NaN
、inf
丢弃
丢弃某些列
df.drop(subsets=[c1, c2], axis=1, inplace=True)
丢弃含空值的列
df.dropna(inplace=True)
填充
填充当前列的均值/中位数
for column in list(df.columns[df.isnull().sum() > 0]):
mean_val = df[column].mean() # 中位数用 df[column].median()
df[column].fillna(mean_val, inplace=True)
使用特殊策略填充
df.fillna(method='pad', inplace=True) # 使用前面一行的值填充空
apply
函数
对多列的值使用某个函数
# 对每个元素开方
df.apply(np.sort)
# 使用自定义函数,对某列使用
df[c1].apply(lambda x:1 if x==1 else 0)
更多详情用法见:pandas.DataFrame.apply
排序
对多列逆序排序
这里不用指定axis是因为pandas找不到index会去找column,不过最好指定,这样更清晰。
df.sort_values(by=[c1, c2, ...], ascending=False)
详情见:pandas.DataFrame.sort_values
对索引排序
用法跟上面类似,主要应用场景是当对列或行排序后拿到前几列后想查看原顺序的情况。
df.sort_index()
详情见:pandas.DataFrame.sort_index
条件查询
单条件查询
df[df[c1]==100] # 这里可以是<, >, <=, >=, !=
df[df[c1].isin([1,2,3])]
df[df[c1].str.contain('substr')]
多条件查询
不同条件用()包含,用 | , & 指定联合策略
df[(df[c1]==100) | df[c2].str == 'b']
进阶
推荐一本书:《利用Python进行数据分析》第二版
推荐看官方英文文档,CSDN上很多比较详尽的文档大都翻译的官方文档和总结的某本书,学习技术还是看一手资料比较好。