在数据框中转换数据时遇到问题

时间:2018-12-10 19:52:38

标签: python dataframe azure-databricks

我已经在下面编写了该函数(经过测试并可以正常工作):

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 :(得分:1)

您的函数ConvertStrDateToWeekId使用字符串。但是在下面的代码行中,函数调用的参数是一系列字符串:

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

此错误的一种可能的解决方法是使用熊猫的apply功能:

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

但是如果没有更多有关您正在处理的数据类型的信息,很难提供进一步的帮助。

答案 1 :(得分:0)

这是我必须解决的问题:

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

不是我想要的那么干净。 也许其他人会提出更清洁的解决方案。