Проблемы с преобразованием данных в датафрейме
Я написал функцию (проверено и работает) ниже:
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)
Но без дополнительной информации о типе данных, которые вы обрабатываете, трудно предоставить дополнительную помощь.