无法转换数据框列数据类型

时间:2018-09-19 16:48:13

标签: python pandas type-conversion dask data-conversion

使用Pandas / Dask处理大数据集后,我将生成的数据帧保存到了一个csv文件中。

当我尝试使用Dask读取输出CSV时,默认情况下数据类型为所有对象。每当我尝试使用常规方法进行转换(例如在读取时定义数据类型或在读取后重新分配它们)时,都会不断遇到有关转换的错误,如下所示:

# ATTEMPT 1

import dask.dataframe as dd
header = ['colA', 'colB', ...]
dtypes = {'colA' : 'float', ...}
df = dd.read_csv('file.csv', names=header, dtype=types)

> TypeError: Cannot cast array from dtype('O') to dtype('float64') according to the rule 'safe'
> ...
> ValueError: could not convert string to float: 'colA'

-----------------------------------------------------------------------------------

# ATTEMPT 2

import dask.dataframe as dd
header = ['colA', 'colB', ...]
df = dd.read_csv('file.csv', names=header)
df['colA'] = df['colA'].astype(str).astype(float)

> ...
> File "/home/routar/anaconda3/lib/python3.6/site-packages/pandas/core/dtypes/cast.py", line 730, in astype_nansafe
> ValueError: could not convert string to float: 'colA'

原始数据框中的所有属性(在转换为CSV之前)均为整数/浮点数,因此可以100%进行转换。我也确定这些值是有效的。

我猜想这与Python关于数据转换的安全政策有关。

是否有解决此问题的方法或任何强制转换的方法?

1 个答案:

答案 0 :(得分:1)

使用dic={'key':1} df=pd.DataFrame() df['a'][1] = str(dic) 从csv读取数据框时,结果将在数据框的第一行中显示列名称。

这就是为什么您会得到错误

  

ValueError:无法将字符串转换为float:'colA'

因为names=header是列的第一个值。

因此,只需将colA参数添加到header=0(以显式使用第一行作为列名)来解决此问题:

read_csv