为啥我Pandas填充的时候有些地方填充不上去?

2022-08-17 19:00:36 浏览数 (2)

大家好,我是皮皮。

一、前言

前几天在Python最强王者交流群【Chloe】问了一道Pandas处理的问题,如下图所示。

原始数据如下:

代码语言:javascript复制
df = pd.DataFrame({
'ord_no':[70001,np.nan,70002,70004,np.nan,70005,np.nan,70010,70003,70012,np.nan,70013],
'purch_amt':[150.5,np.nan,65.26,110.5,948.5,np.nan,5760,1983.43,np.nan,250.45, 75.29,3045.6],
'sale_amt':[10.5,20.65,np.nan,11.5,98.5,np.nan,57,19.43,np.nan,25.45, 75.29,35.6],
'ord_date': ['2012-10-05','2012-09-10',np.nan,'2012-08-17','2012-09-10','2012-07-27','2012-09-10','2012-10-10','2012-10-10','2012-06-27','2012-08-17','2012-04-25'],
'customer_id':[3002,3001,3001,3003,3002,3001,3001,3004,3003,3002,3001,3001],
'salesman_id':[5002,5003,5001,np.nan,5002,5001,5001,np.nan,5003,5002,5003,np.nan]})
df

预期的结果如下图所示:使用代码

代码语言:javascript复制
df.fillna(df.mode())

得到的结果如下图所示:

有些地方还是nan值。

二、实现过程

方法一

这里【月神】给出一个可行的代码,大家后面遇到了,可以对应的修改下,事半功倍,代码如下所示:

代码语言:javascript复制
df.apply(lambda x: x.fillna(x.mode().iloc[0]))

运行之后,结果就是想要的了。

方法二

这里【月神】还补充了一份代码,如下所示:

代码语言:javascript复制
df.fillna(df.mode().head(1).to_dict('records')[0])

运行之后,也可以完成填充。

方法三

后来【瑜亮老师】也给了一份代码。代码如下所示:

代码语言:javascript复制
df.fillna(df.mode().iloc[0], axis=0)

运行之后,结果就是想要的了。

完美的解决了粉丝的问题!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一道使用Pandas处理数据的问题,文中针对该问题给出了具体的解析和代码实现,一共三个方法,帮助粉丝顺利解决了问题。

最后感谢粉丝【Chloe】提问,感谢【月神】、【瑜亮老师】给出的思路和代码解析,感谢【dcpeng】、【冯诚】、【冷喵】、【D I Y】等人参与学习交流。

0 人点赞