簡體   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