Как исправить ошибку при сохранении dask dataframe в csv? - PullRequest
2 голосов
/ 27 апреля 2019

Я получаю сообщение об ошибке, когда пытаюсь сохранить dask dataframe в csv.Короче говоря, у меня есть pandas df, который состоит из 10 столбцов и 20 строк, а затем я загрузил dask df, который составляет 350 столбцов и 6+ миллионов строк (~ 6 ГБ).Мне нужно было сделать довольно простое левое соединение с пандами Д.Ф.После этого соединения я смотрю на типы данных конечного dask df, используя final.dtypes, и он показывает 12 столбцов, как я и надеялся.Однако, когда я пытаюсь преобразовать dask df с именем final в .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')

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Если вам действительно не нужны эти столбцы, вы можете просто исключить их, передав columns=[...] в dd.read_csv, включая только те столбцы, которые вам нужны .

1 голос
/ 27 апреля 2019

Вы передаете dtype = str, но я думаю, что, возможно, вам следует передать dtype = object, который Pandas использует для представления действительно любых нечисловых данных.

Функция dask.dataframe.read_csv выдает сообщение об ошибке, поощряющее использование dtype = object. Это фактически дает вам полный dtype={...} диктат, который вы могли бы передать, чтобы заставить вещи работать в сообщении об ошибке.

...