繁体   English   中英

将dask数据帧保存到csv时如何纠正错误?

[英]How to correct error when saving dask dataframe to csv?

当我尝试将 dask 数据帧保存到 csv 时,我不断收到错误消息。 简而言之,我有一个由 10 列和 20 行组成的 Pandas df,然后我加载了一个 dask df,它是 350 列和 6+ 百万行(~6GB)。 我需要在 pandas df 上做一个相当简单的左连接。 完成连接后,我使用final.dtypes最终 dask df 的数据类型,它显示了 12 列,正如我所希望的。 但是,当我尝试将名为final的 dask df 转换为 .csv 时,我不断收到一个错误,该错误引用了dask_df列,即使它们不在最终表中。 这是怎么回事,我该如何纠正? 如有必要,我可以提供样本数据。

错误信息:

Usually this is due to dask's dtype inference failing, and
*may* be fixed by specifying dtypes manually by adding:
dtype={'Authorized Official Telephone Number': 'object',
       'Other Provider Identifier Issuer_33': 'object',
       'Other Provider Identifier Issuer_34': 'object',
       'Other Provider Identifier Issuer_35': 'object',
       'Other Provider Identifier Issuer_36': 'object',
       'Other Provider Identifier Issuer_37': 'object',
       'Other Provider Identifier Issuer_39': 'object',
       'Other Provider Identifier Issuer_40': 'object',
       'Other Provider Identifier Issuer_41': 'object',
       'Other Provider Identifier Issuer_42': 'object',
       'Other Provider Identifier Issuer_43': 'object',
       'Other Provider Identifier Issuer_44': 'object',
       'Other Provider Identifier Issuer_45': 'object',
       'Other Provider Identifier Issuer_46': 'object',
       'Other Provider Identifier Issuer_47': 'object',
       'Other Provider Identifier Issuer_48': 'object',
       'Other Provider Identifier Issuer_49': 'object',
       'Other Provider Identifier_37': 'object',
       'Other Provider Identifier_48': 'object',
       'Other Provider Identifier_49': 'object',
       'Provider Business Mailing Address Fax Number': 'object',
       'Provider Business Practice Location Address Fax Number': 'object'}

to the call to `read_csv`/`read_table`.

我的代码:

import dask.dataframe as dd
import pandas as pd

pandas_df = dd.read_csv('small_table.csv')

dask_df = dd.read_csv('npidata_pfile_20050523-20190407.csv',low_memory=False,dtype=str)

final= dd.merge(pandas_df, dask_df[['NPI','Provider First Name']], how='left', left_on='Physician NPI',right_on='NPI')

final.to_csv('e.csv')

您正在传递 dtype=str,但我认为也许您应该传递 dtype=object,这正是 Pandas 用来表示任何非数字数据的方式。

dask.dataframe.read_csv 函数为您提供了一条错误消息,鼓励您使用 dtype=object。 它实际上为您提供了完整的dtype={...} dict,您可以传入它以使错误消息中的内容正常工作。

如果你真的不需要这些列中的任何一个,你可以通过将columns=[...]传递给dd.read_csv来简单地排除它们,只包括你确实需要的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM