Проблемы с преобразованием данных в датафрейме - PullRequest
0 голосов
/ 10 декабря 2018

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

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 ]

0 голосов
/ 12 декабря 2018

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

`# 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()`

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

0 голосов
/ 11 декабря 2018

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...