首页 > 解决方案 > ValueError:计算数据中的列与提供的元数据中的列不匹配

问题描述

我正在处理一个 kaggle 竞赛中包含 550 万行的数据集。在 Pandas 中读取 .csv 文件并对其进行处理需要花费数小时。

天黑了。Dask 速度很快,但有很多错误。

这是代码片段,

#drop some columns
df = df.drop(['dropoff_latitude', 'dropoff_longitude','pickup_latitude', 'pickup_longitude', 'pickup_datetime' ], axis=1)


# In[ ]:


#one-hot-encode cat columns
df = dd.get_dummies(df.categorize())


# In[ ]:


#split train and test and export as csv
test_df = df[df['fare_amount'] == -9999]
train_df = df[df['fare_amount'] != -9999]

test_df.to_csv('df_test.csv')
train_df.to_csv('df_train.csv')

运行线路时;

test_df.to_csv('df_test.csv')
train_df.to_csv('df_train.csv')

产生错误

ValueError: The columns in the computed data do not match the columns
in the provided metadata

什么可能导致这种情况,我该如何阻止它。

N.B First time using Dask.

标签: pythonpython-3.xdask

解决方案


文档字符串描述了从 CSV 读取时如何出现这种情况。很可能,如果你已经完成了len(dd.read_csv(...)),你会已经看到它,没有 drop、dummys 和 train-split。错误消息可能会准确地告诉您哪些列是问题,以及预期的类型与找到的类型。

会发生什么,dask 从第一个文件的第一个块中猜测数据帧的 dtypes。有时这并不能反映整个数据集的类型:例如,如果一列恰好在第一个块中没有值,则其类型将为float64,因为 pandasnan用作 NULL 占位符。在这种情况下,您需要确定正确的 dtypes,并将它们提供给read_csv使用dtype=关键字。请参阅 pandas 文档,dtype=了解数据解析转换的典型用法和其他参数,这可能在加载时有所帮助。


推荐阅读