python - 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.
解决方案
文档字符串描述了从 CSV 读取时如何出现这种情况。很可能,如果你已经完成了len(dd.read_csv(...))
,你会已经看到它,没有 drop、dummys 和 train-split。错误消息可能会准确地告诉您哪些列是问题,以及预期的类型与找到的类型。
会发生什么,dask 从第一个文件的第一个块中猜测数据帧的 dtypes。有时这并不能反映整个数据集的类型:例如,如果一列恰好在第一个块中没有值,则其类型将为float64
,因为 pandasnan
用作 NULL 占位符。在这种情况下,您需要确定正确的 dtypes,并将它们提供给read_csv
使用dtype=
关键字。请参阅 pandas 文档,dtype=
了解数据解析转换的典型用法和其他参数,这可能在加载时有所帮助。
推荐阅读
- javascript - 功能不会停止运行角度 5
- python - AttributeError:模块 'datetime' 没有属性 'strftime'
- javascript - 当我不想更新 javascript 中的 html 时,页面会不断刷新
- apache-zookeeper - 为什么写入请求必须进行领导者选举,而读取请求则不需要?
- amazon-dynamodb - 在 DynamoDB 中查询索引导致主键错误
- spring - 热插拔不适用于 Intellij 和 spring-boot-starter-web 的 Spring Boot
- gdb - 我可以在 GDB TUI 模式下将布局方向更改为水平吗?
- pandas - Pandas:将包含 JSON 编码观察数组的列展开为行
- java - Java 中的 Spark Streaming 单元测试
- php - AngularJS HTTP请求与另一个功能