我有一个读入的数据框,
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
因此,我尝试了fllowoing,
df = df.apply(pd.to_numeric, errors = 'ignore')
这没有将我的July
列转换为数字/ float64。
接下来,我尝试了this,
df.replace(r'\s+', np.nan, regex=True)
这也没有用。我的数据框中仍然有空白空间。不知道该怎么办。
我正在阅读此post,似乎与此相反。
如何确定我有nan
而不是空字符串?因为July
列中的空字符串使该列成为object
,并且在groupby
子句中不计入汇总。
(我检查了原始的.csv文件和该行的确切位置,它是正常的空单元格,而其他空单元格则以nan
的形式读入,而这个特定的空单元格则没有。)
任何建议都会很好。
答案 0 :(得分:0)
您可以尝试指定列的数据类型,以便所有空白/字符串均为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)
答案 1 :(得分:0)
我最初的想法是删除July
列中具有空格的行。尽管我不想这样做,因为如果我在其他列中具有重大价值,那该怎么办呢?
但是,到目前为止,我只是由于空白而找到了解决方案,July
是object
类型。使用following
df['July'] = pd.to_numeric(df['July'], errors='coerce')
我可以手动转换为float64
类型。这样我就可以groupby
上班了。
但是,当我在数据帧中读取诸如na_values = ['nan', '']
和@Nick Tallant建议的数据时,最好进行处理。不幸的是,他们没有为我工作。