Pandas 数据处理常用方法

注意:这里只是总结出了自己常用的一些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中定位单个数据,有两种方式:

  1. pandas.DataFrame.at
  2. pandas.DataFrame.iat

访问多行/多列数据,也有两种方式

  1. pandas.DataFrame.loc

  2. pandas.DataFrame.iloc

遍历方式

遍历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

清洗空值

这里指的空为:Nonenumpy.NaNinf

丢弃

丢弃某些列

df.drop(subsets=[c1, c2], axis=1, inplace=True)

详情见:pandas.DataFrame.drop

丢弃含空值的列

df.dropna(inplace=True)

详情见:pandas.DataFrame.dropna

填充

填充当前列的均值/中位数

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) # 使用前面一行的值填充空

详情见:pandas.DataFrame.fillna

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上很多比较详尽的文档大都翻译的官方文档和总结的某本书,学习技术还是看一手资料比较好。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值