【问题标题】:Can't convert dataframe column data types无法转换数据框列数据类型
【发布时间】: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


【解决方案1】:

当您使用 names=header 从 csv 读取数据帧时,您会在数据帧的第一行中得到列名。

这就是你得到错误的原因

ValueError:无法将字符串转换为浮点数:'colA'

因为colA 是您列的第一个值。

所以只需将header=0 参数添加到read_csv(明确使用第一行作为列名)来解决问题:

df = dd.read_csv('file.csv', names=header, dtype=types, header=0)

【讨论】:

  • 大声笑错误消息让我认为问题在于列'colA'而不是实际值'colA'。现在类型没问题了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2022-01-02
相关资源
最近更新 更多