在数据框中转换数据时出现问题
Problems transforming data in a dataframe
我已经在下面编写了函数(经过测试和工作):
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'))
然而,当我 "show" 我的数据框时, "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'
我做错了什么?
您的函数 ConvertStrDateToWeekId
接受一个字符串。但在下一行中,函数调用的参数是一系列字符串:
x['testDates'] = ConvertStrDateToWeekId(x['CONFIRMEDDELIVERYDATE'])
此错误的可能解决方法是使用 pandas 的 apply
函数:
x['testDates'] = x['CONFIRMEDDELIVERYDATE'].apply(ConvertStrDateToWeekId)
但是如果没有关于您正在处理的数据类型的更多信息,就很难提供进一步的帮助。
这是我开始工作的解决方法:
`# 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()`
没有我想要的那么干净。
也许其他人可以提出更清洁的解决方案。
我已经在下面编写了函数(经过测试和工作):
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'))
然而,当我 "show" 我的数据框时, "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'
我做错了什么?
您的函数 ConvertStrDateToWeekId
接受一个字符串。但在下一行中,函数调用的参数是一系列字符串:
x['testDates'] = ConvertStrDateToWeekId(x['CONFIRMEDDELIVERYDATE'])
此错误的可能解决方法是使用 pandas 的 apply
函数:
x['testDates'] = x['CONFIRMEDDELIVERYDATE'].apply(ConvertStrDateToWeekId)
但是如果没有关于您正在处理的数据类型的更多信息,就很难提供进一步的帮助。
这是我开始工作的解决方法:
`# 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()`
没有我想要的那么干净。 也许其他人可以提出更清洁的解决方案。