【发布时间】:2018-09-19 16:48:13
【问题描述】:
使用 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 关于数据转换的安全政策有关。
是否有解决方法或任何强制转换的方法?
【问题讨论】:
-
您的 csv 是否已经包含标题?
-
@mad_ 确实如此。已经修好了。
标签: python pandas type-conversion dask data-conversion