У меня есть CSV, который слишком велик для чтения в память, поэтому я пытаюсь использовать Dask для решения моей проблемы. Я обычный пользователь Pandas, но мне не хватает опыта работы с Dask. В моих данных у меня есть столбец «MONTHSTART», с которым я хочу взаимодействовать как объект datetime. Однако я не могу получить вывод из кадра данных Dask, несмотря на мой код, работающий в примере с Pandas.
Я прочитал мой CSV в использовании Dask
df = dd.read_csv(filename, dtype='str')
Затем я конвертирую dtype столбца в объект datetime
def parse_dates(df):
return pd.to_datetime(df['MONTHSTART'], format='%d%b%Y')
meta = ('time', pd.Timestamp)
df.map_partitions(parse_dates, meta=meta)
Наконец, я пытаюсь применить лямбда-функцию для создания нового столбца на основе моего столбца datetime
df['MONTHS_AGO'] = df.apply(
lambda y: (dt.date.today().year - y['MONTHSTART'].dt.year) * 12 +
(dt.date.today().month - y['MONTHSTART'].dt.month),
axis=1,
meta=meta)
Я не уверен насчет использования мета здесь, без этого мой код не смог бы попросить меня указать мету.
Без мета я получаю
ValueError: Metadata inference failed, please provide `meta` keyword
С мета я получаю
AttributeError: ("'str' object has no attribute 'dt'", 'occurred at index 0')
Я неправильно подхожу к этой проблеме? Есть ли хитрость в применении лямбда-функций в Dask, которые мне не хватает?
Edit:
Я запутал эту информацию и отбросил множество столбцов. Я пытался сохранить достаточно, чтобы проблема могла быть решена.
Пример df.head (2) .to_dict:
{'AGE_1': {0: '57', 1: '57'},
'APREM': {0: '347.08581006', 1: '347.08581006'},
'BUSINESS_1': {0: 'COMPUTERSERVICES', 1: 'COMPUTERSERVICES'},
'COMPULSORYEXCESSAD': {0: '0', 1: '0'},
'COVERTYPE': {0: 'Comprehensive', 1: 'Comprehensive'},
'DRIVINGRESTRICTION': {0: 'IOD', 1: 'IOD'},
'EARNEDTECH': {0: '35.438383793', 1: '15.356632977'},
'ENDDATE': {0: '13AUG2017', 1: '13AUG2017'},
'EXPMONTH': {0: 'EVY01APR2017', 1: 'EVY01AUG2017'},
'INFORCEATEOM': {0: '1', 1: '0'},
'LICENCETYPE_1': {0: 'FullUKCarLicence', 1: 'FullUKCarLicence'},
'MARITALSTATUS_1': {0: 'Partnered', 1: 'Partnered'},
'MILEAGERESTRICTION': {0: '8000', 1: '8000'},
'MIN_AGE': {0: '57', 1: '57'},
'MIN_EXP': {0: '18', 1: '18'},
'MIN_EXP_AGE': {0: '57', 1: '57'},
'MIN_EXP_LICENCETYPE': {0: 'FullUKCarLicence', 1: 'FullUKCarLicence'},
'MONTHEND': {0: '30APR2017', 1: '31AUG2017'},
'MONTHSTART': {0: '01APR2017', 1: '01AUG2017'},
'REGION': {0: 'East Anglia', 1: 'East Anglia'},
'STARTDATE': {0: '16FEB2017', 1: '16FEB2017'},
'TENURE': {0: '4th Renewal', 1: '4th Renewal'},
'TotalIncurredExclRI': {0: nan, 1: nan},
'VEHICLECOUNT': {0: '1', 1: '1'},
'VEHICLEKEPTOVERNIGHT': {0: 'Drive', 1: 'Drive'},
'VEHICLEMODIFICATION': {0: 'false', 1: 'false'},
'VEHICLENUMBER': {0: '1', 1: '1'},
'VEHICLEUSAGE': {0: 'Personal Business Use', 1: 'Personal Business Use'},
'VOLUNTARYEXCESS': {0: '250', 1: '250'}}