无法使用熊猫正确替换空白值
Posted
技术标签:
【中文标题】无法使用熊猫正确替换空白值【英文标题】:Can't properly replace blank values using pandas 【发布时间】:2020-08-15 20:48:38 【问题描述】:我是 python 初学者,所以我正在使用带有 list of restaurants with a Michelin star (restaurants_df
) 的数据框中的 pandas 练习一些数据分析。
例如,当我显示前 5 行时,我注意到在第 4 行的“price
”列 (object type
) 中有一个空白值:
In [ ]: restaurants_df.head()
Out[ ]:
name year latitude longitude city region zipCode cuisine price
0 Kilian Stuba 2019 47.348580 10.17114 Kleinwalsertal Austria 87568 Creative $
1 Pfefferschiff 2019 47.837870 13.07917 Hallwang Austria 5300 Classic cuisine $
2 Esszimmer 2019 47.806850 13.03409 Salzburg Austria 5020 Creative $
3 Carpe Diem 2019 47.800010 13.04006 Salzburg Austria 5020 Market cuisine $
4 Edvard 2019 48.216503 16.36852 Wien Austria 1010 Modern cuisine
然后我检查每列中有多少 NaN
值。对于 price
列,有 151 个值:
In [ ]: restaurants_df.isnull().sum()
Out[ ]: name 0
year 0
latitude 0
longitude 0
city 2
region 0
zipCode 149
cuisine 0
price 151
dtype: int64
之后,我将这些值替换为字符串"No Price"
,并确认所有值都已被替换。
In [ ]: restaurants_df["price"].fillna("No Price", inplace = True)
restaurants_df.isnull().sum()
Out[ ]: name 0
year 0
latitude 0
longitude 0
city 0
region 0
zipCode 0
cuisine 0
price 0
dtype: int64
但是,当我显示前 5 行时,问题仍然存在。
In [ ]: restaurants_df.head()
Out[ ]:
name year latitude longitude city region zipCode cuisine price
0 Kilian Stuba 2019 47.348580 10.17114 Kleinwalsertal Austria 87568 Creative $
1 Pfefferschiff 2019 47.837870 13.07917 Hallwang Austria 5300 Classic cuisine $
2 Esszimmer 2019 47.806850 13.03409 Salzburg Austria 5020 Creative $
3 Carpe Diem 2019 47.800010 13.04006 Salzburg Austria 5020 Market cuisine $
4 Edvard 2019 48.216503 16.36852 Wien Austria 1010 Modern cuisine
知道为什么会发生这种情况以及如何解决吗?提前致谢!
【问题讨论】:
请在您的问题中提供代码,而不是屏幕截图。这将使回答者更容易重现您的问题,而不是手动输入。 很抱歉给您带来不便,我是新来的,正在尝试找出提问的最佳方式。感谢您的提示,我会编辑我的帖子! 请提供minimal reproducible example。除非绝对必要,否则请不要将信息作为图像共享。请参阅:meta.***.com/questions/303812/…、idownvotedbecau.se/imageofcode、idownvotedbecau.se/imageofanexception。 【参考方案1】:据我了解,您正在处理 空白值 和 空值。这些处理方式不同。查看this question 了解如何处理它们。
【讨论】:
【参考方案2】:查看kaggle 的数据集显示,前四家餐厅是 5 '$',而第五家是 4 '$'。因此,我猜 jupyter notebook 只是没有在视觉上显示所有的“$”,但是内部的数据是正确的。
要仔细检查我是否正确,请尝试运行
df.price
看看你会得到什么。我认为这可能与 jupyter 的 html 处理程序有关,它试图显示四个美元符号。 You can look at this issue that is similar to yours
如果您对此感到困扰,请使用类似的方式将“$”符号替换为数字
df.replace('price': '$': 1, '$$': 2, '$$$': 3, '$$$$': 4, '$$$$$': 5)
【讨论】:
你是对的!我只是仔细检查了一下,事实上,Jupyther 并没有显示price
列的全部内容。我已经考虑将每组符号转换为数字比例,因此我将继续进行该分析。感谢您的帮助!
嗨@ricardoper9 如果这个或任何答案已经解决了您的问题,请通过单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
嘿,再次感谢您的提示。当然,我的问题已经解决了,我会接受的!【参考方案3】:
我认为 pandas 不会将带有 '' 的区域识别为空。例如:
df2 = pd.DataFrame(np.array([[1, 2, ''], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
然后:
df2.isnull()
a b c
0 False False False
1 False False False
2 False False False
查看here,然后尝试:
pandas.options.mode.use_inf_as_na = True
编辑:
您也可以尝试重播:
df2.replace('': 'No Price', inplace=True)
EDIT2:我相信@AKareem 有解决方案,但要扩展您可以使用它来逃避乳胶
restaurants_df.replace('price':
'$': '\$',
'$$': '\$$',
'$$$': '\$$$',
'$$$$': '\$$$$',
'$$$$$': '\$$$$$'
, inplace=True)
【讨论】:
以上是关于无法使用熊猫正确替换空白值的主要内容,如果未能解决你的问题,请参考以下文章
将索引转换为日期时间对象后,MatplotLib 无法正确绘制熊猫时间序列 1 分钟数据