我该如何处理这种情况:“n/a”在 pandas 数据框中显示为“nan”,但无法对其进行字符串匹配和替换
Posted
技术标签:
【中文标题】我该如何处理这种情况:“n/a”在 pandas 数据框中显示为“nan”,但无法对其进行字符串匹配和替换【英文标题】:How do I handle this situation: 'n/a' shows up as 'nan' in pandas dataframe, but cannot string-match it and replace 【发布时间】:2018-12-16 15:57:27 【问题描述】:我有一个 CSV 文件,其中有几行是 n/a
。当我将它作为熊猫数据框加载时,它显示为nan
。
当我在这几行中使用 split
、lower
等函数时,这会导致问题。
data_df['column'][104]
>>> nan
data_df['column'][104].split()
>>>
AttributeError Traceback (most recent call last)
<ipython-input-38-6efe06f0a4ec> in <module>()
----> 1 data_df['column'][104].split()
AttributeError: 'float' object has no attribute 'split'
data_df['column'][104].lower()
>>>
AttributeError Traceback (most recent call last)
<ipython-input-41-c80cc9ae0712> in <module>()
----> 1 data_df['column'][104].lower()
AttributeError: 'float' object has no attribute 'lower'
当我尝试用空格替换 nan
s 时(不会导致这些错误),使用 fillna
方法时,它不会做任何事情:
data_df.fillna('')
data_df['column'][104]
>>> nan
所以我尝试将其替换为字符串:
for i in range(len(data_df)):
if data_df['column'][i]=='nan':
data_df['column'][i]=''
data_df['column'][104]
>>> nan
for i in range(len(data_df)):
if data_df['column'][i]=='n/a':
data_df['column'][i]=''
data_df['column'][104]
>>> nan
以下不打印任何内容:
for i in range(len(data_df)):
if (data_df['column'][i]=='nan' or data_df['column'][i]=='n/a'):
print(data_df['column'][i])
为什么我无法捕捉和替换nan
s 或n/a
s?我该如何解决?
【问题讨论】:
您可以尝试df = pd.read_csv('csvfile.csv' ,na_filter=False)
,但这不会检测到任何缺失值标记。
【参考方案1】:
我认为我们可以在一开始就解决它
df=pd.read_csv('Yourfile.csv',na_values=['n/a']).fillna('')
【讨论】:
有趣。有用。但是为什么我没能赶上n/a
s?
@Kristada673 你可以抓住它,只需将它分配回去,df=df.fillna('')【参考方案2】:
data_df.fillna('')
创建数据框的副本。如果要更改原始数据框,请致电data_df.fillna('', inplace=True)
。
【讨论】:
以上是关于我该如何处理这种情况:“n/a”在 pandas 数据框中显示为“nan”,但无法对其进行字符串匹配和替换的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter:当我插入数据时出现重复键错误,我该如何处理这个错误?