首页 > 解决方案 > 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() 

我只得到Juneand AugustasJuly有一个空格/空字符串。

           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而这个特定的不是)

任何建议都会很好。

标签: pythonpandascsvnan

解决方案


我最初的想法是删除列中有空格的July行。尽管我不想这样做,因为如果我在分析所需的其他列中有重要价值怎么办。

但是,就目前而言,我找到了一个解决方案,只是因为空白,Julyobject类型。使用以下内容

df['July'] = pd.to_numeric(df['July'], errors='coerce')

我可以手动转换为float64类型。我可以让我groupby的工作。

但是,当我读入数据框时,处理它是理想的,例如na_values = ['nan', '']@Nick Tallant 建议的那样。不幸的是,它们对我不起作用。


推荐阅读