[英]Get pandas.read_csv to read empty values as empty string instead of 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()
我只得到June
和August
因為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
列中具有空白空間的行。 盡管我不想這樣做,因為如果我在其他列中有重大價值需要進行分析該怎么辦。
但是,就目前而言,我只是因為有空白而找到了解決方案, July
是object
類型。 使用以下內容 ,
df['July'] = pd.to_numeric(df['July'], errors='coerce')
我可以手動轉換為float64
類型。 而且我可以讓我的groupby
上班。
但是,當我在數據框中讀取諸如na_values = ['nan', '']
以及@Nick Tallant建議的內容時,最好進行處理。 不幸的是,他們沒有為我工作。
您可以嘗試指定列的數據類型,以使所有空白/字符串均為NaN。 您可以嘗試使用dtype
或converters
。
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.