Проблемы с преобразованием данных в датафрейме

Я написал функцию (проверено и работает) ниже:

import pandas as pd

def ConvertStrDateToWeekId(strDate):
    dateformat = '2016-7-15 22:44:09'
    aDate = pd.to_datetime(strDate)
    wk = aDate.isocalendar()[1]
    yr = aDate.isocalendar()[0]
    Format_4_5_4_date = str(yr) + str(wk)
    return Format_4_5_4_date'

и из того, что я видел в сети, я мог бы использовать это следующим образом:

ml_poLines = result.value.select('PURCHASEORDERNUMBER', 'ITEMNUMBER', PRODUCTCOLORID', 'RECEIVINGWAREHOUSEID', ConvertStrDateToWeekId('CONFIRMEDDELIVERYDATE'))

Однако, когда я "показываю" мой фрейм данных, "CONFIRMEDDELIVERYDATE" столбец является исходной строкой даты и времени! Никаких ошибок не дано.

Я также попробовал это:

ml_poLines['WeekId'] = (ConvertStrDateToWeekId(ml_poLines['CONFIRMEDDELIVERYDATE']))

и получите следующую ошибку:

"ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions." which makes no sense to me.

Я также попробовал это безуспешно.

 x = ml_poLines.toPandas();
 x['testDates'] = ConvertStrDateToWeekId(x['CONFIRMEDDELIVERYDATE'])
 ml_poLines2 = spark.createDataFrame(x)
 ml_poLines2.show()

Выше выдает следующую ошибку:

AttributeError: 'Series' object has no attribute 'isocalendar'

Что я сделал не так?

2 ответа

Решение

Это был обходной путь, который я получил на работу:

`# convert the confirimedDeliveryDate to a WeekId
 x= ml_poLines.toPandas();
 x['WeekId'] = x[['ITEMNUMBER', 'CONFIRMEDDELIVERYDATE']].apply(lambda y:ConvertStrDateToWeekId(y[1]), axis=1)
 ml_poLines = spark.createDataFrame(x)
 ml_poLines.show()`

Не так чисто, как хотелось бы. Может быть, кто-то еще может предложить более чистое решение.

Ваша функция ConvertStrDateToWeekId берет строку Но в следующей строке аргумент вызова функции представляет собой последовательность строк:

x['testDates'] = ConvertStrDateToWeekId(x['CONFIRMEDDELIVERYDATE'])

Возможное решение этой ошибки - использовать apply-функция панд:

x['testDates'] = x['CONFIRMEDDELIVERYDATE'].apply(ConvertStrDateToWeekId)

Но без дополнительной информации о типе данных, которые вы обрабатываете, трудно предоставить дополнительную помощь.

Другие вопросы по тегам