簡體   English   中英

熊貓將CSV中的空單元格識別為EMPTY SPACE,而不是nan

[英]Pandas Recognizes Empty Cell From CSV as EMPTY SPACE Instead of 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() 

我只得到JuneAugust因為July有一個空格/字符串。

           ID    Machine     June    August 
0         100     ABC        10      15
1         101     CDQ        27      31

因此,我嘗試了Flolowing

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列中具有空白空間的行。 盡管我不想這樣做,因為如果我在其他列中有重大價值需要進行分析該怎么辦。

但是,就目前而言,我只是因為有空白而找到了解決方案, Julyobject類型。 使用以下內容

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

我可以手動轉換為float64類型。 而且我可以讓我的groupby上班。

但是,當我在數據框中讀取諸如na_values = ['nan', '']以及@Nick Tallant建議的內容時,最好進行處理。 不幸的是,他們沒有為我工作。

您可以嘗試指定列的數據類型,以使所有空白/字符串均為NaN。 您可以嘗試使用dtypeconverters

df = pd.read_csv(r'path\file.csv', encoding = "ISO-8859-1"
                , dtype={'June': int, 'July':int, 'August':int})

df = pd.read_csv(r'path\\file.csv', encoding="ISO-8859-1" , converters={'June': int, 'July':int, 'August':int})

編輯:您也可以嘗試numpy dtypes( https://docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM