python - Pandas 将 CSV 中的空单元格识别为 EMPTY SPACE 而不是 nan
问题描述
我有一个读入的数据框,
df = pd.read_csv(r'path\file.csv', encoding = "ISO-8859-1")
看起来是这样的
Machine ID Machine June July August
0 100 ABC 10 12 nan
1 100 ABC nan 15 15
2 101 CDQ 12 20
3 101 CDQ 15 32 11
和数据类型:
Machine ID int 64
Machine object
June float64
July object
August float64
当我尝试groupby
喜欢这个时,
machine_group = df.groupby(['Machine ID','Machine'])\['June', 'July', 'August'].sum()\
.reset_index()
我只得到June
and August
asJuly
有一个空格/空字符串。
ID Machine June August
0 100 ABC 10 15
1 101 CDQ 27 31
因此,我尝试了以下方法,
df = df.apply(pd.to_numeric, errors = 'ignore')
这没有将我的July
列转换为 numeric/float64。
接下来,我尝试了这个,
df.replace(r'\s+', np.nan, regex=True)
这也没有奏效。我的数据框中仍然有空白空间。不知道该怎么办。
我正在阅读这篇文章,好像我有这个相反的问题。
我怎样才能确保我有nan
而不是空字符串?因为列中的空字符串July
使列成为object
并且它不计入groupby
子句中的聚合。
(我检查了原始的 .csv 文件和那个确切的行,它是正常的空单元格,其他空单元格被读入,nan
而这个特定的不是)
任何建议都会很好。
解决方案
我最初的想法是删除列中有空格的July
行。尽管我不想这样做,因为如果我在分析所需的其他列中有重要价值怎么办。
但是,就目前而言,我找到了一个解决方案,只是因为空白,July
是object
类型。使用以下内容,
df['July'] = pd.to_numeric(df['July'], errors='coerce')
我可以手动转换为float64
类型。我可以让我groupby
的工作。
但是,当我读入数据框时,处理它是理想的,例如na_values = ['nan', '']
@Nick Tallant 建议的那样。不幸的是,它们对我不起作用。