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

标签 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 之前)都是整数/ float ,因此转换是 100% 可能的。我也确定这些值是有效的。

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

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

最佳答案

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

这就是你得到错误的原因

ValueError: could not convert string to float: 'colA'

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

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

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

关于python - 无法转换数据框列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410696/

相关文章:

python - 在 Python 2.7 中打开 URL 时返回乱码

javascript - 注入(inject)的 Javascript 错误(Python Web Scraper)

python - 控制 df.at 或 df.loc 的行为

python - 按 Multiindex 级别 2 上的位置对 pandas 数据帧进行切片

c++ - std::vector<uchar> 到 char* 数据丢失

python - 根据给定的汉明距离折叠字符串集

python - 如何屏蔽索引小于某个值的数组

python - 我正在尝试使用另一个由值组成的数据框创建一个新的数据框

c# - 不能将类型字符串隐式转换为 char

Haskell 隐式转换