我正在尝试将读取csv的数据帧的所有列转换为float。当我执行以下代码时:
data = pd.read_csv('statistic.csv',
parse_dates=True, index_col=['DATE'], dtype={'QUANTITY' : 'float',
low_memory=False)
这是没有dtype参数的data.head()的样子:
ACCEPTOR QUANTITY ARTICLENO
DATE
2014-07-07 00:00:00.0 1 348 434070668
2014-08-11 00:00:00.0 1 281 434070668
2014-08-18 00:00:00.0 1 835 434070668
2014-08-25 00:00:00.0 1 147 434070668
2014-09-08 00:00:00.0 1 569 434070668
使用dtype选项,出现以下错误:
ValueError: could not convert string to float: 'QUANTITY'
背景:我需要将其手动转换为浮点数,因为熊猫无法自动识别那些大文件的数据类型(csv大约有10亿行/ 400 MB)(自动识别约50万行)。 稍后可能会发生,同一日期的同一商品编号有多个数量条目,因此我需要一个数字类型来防止字符串连接,因为我执行以下代码来为一些机器学习准备数据框:
data_extracted = data.groupby(['DATE','ARTICLENO'])
['QUANTITY'].sum().unstack()
我知道QUANTITY不是有效的浮点数,但是如何告诉熊猫不要转换列标题?
编辑:这是csv的复制粘贴:
ACCEPTOR QUANTITY ARTICLENO DATE
1 348 434070668 2014-07-07 00:00:00.0
1 281 434070668 2014-08-11 00:00:00.0
1 835 434070668 2014-08-18 00:00:00.0
1 147 434070668 2014-08-25 00:00:00.0
1 569 434070668 2014-09-08 00:00:00.0
1 890 434070668 2014-09-22 00:00:00.0
1 358 434070668 2014-09-29 00:00:00.0
1 359 434070668 2014-10-06 00:00:00.0
1 166 434070668 2014-10-27 00:00:00.0
1 235 434070668 2014-11-24 00:00:00.0
1 378 434070668 2014-12-15 00:00:00.0
答案 0 :(得分:1)
尝试一下
选项1
data = pd.read_csv('statistic.csv',
parse_dates=True, index_col=['DATE'], dtype={'QUANTITY' : 'float',
low_memory=False, dtype={'QUANTITY': np.float64})
选项2
data[['QUANTITY']] = data[['QUANTITY']].apply(pd.to_numeric, errors='coerce')