当数据框包含日期字段时,Dask map_partitions 失败
Dask map_partitions fails when dataframe contains date field
以下代码失败,说字段date2
没有month
属性因为date2
类型是Series
,而它的类型显然是一个日期.我错过了什么?
错误是AttributeError: 'Series' object has no attribute 'month'
import pandas as pd
import dask
import dask.dataframe as dd
import datetime
pdf = pd.DataFrame({
'id2': [1, 1, 1, 2, 2],
'balance': [150, 140, 130, 280, 260],
'date2' : [datetime.datetime(2021,3,1), datetime.datetime(2021,4,1),
datetime.datetime(2021,5,1), datetime.datetime(2021,1,1),
datetime.datetime(2021,2,1)]
})
ddf = dd.from_pandas(pdf, npartitions=1)
def func2(df):
return df.date2.month
x = ddf.map_partitions(func2) # <-- fails here
要访问 datetime
函数,需要使用 .dt
accessor,因此在这种情况下的修复是:
def func2(df):
return df.date2.dt.month
请注意,在这种情况下,该函数接受一个数据帧,但 returns 一个系列。这很好,但对于某些用例,您可能对修改数据框并返回修改后的版本感兴趣。在这种情况下,该函数将如下所示:
def func2(df):
df['modified_column'] = df.date2.dt.month
return df
注意 pandas' 访问器在 dask 中是受支持的,所以在这种情况下你根本不需要映射函数
x = ddf.date2.dt.month
(评论中也有说明)
以下代码失败,说字段date2
没有month
属性因为date2
类型是Series
,而它的类型显然是一个日期.我错过了什么?
错误是AttributeError: 'Series' object has no attribute 'month'
import pandas as pd
import dask
import dask.dataframe as dd
import datetime
pdf = pd.DataFrame({
'id2': [1, 1, 1, 2, 2],
'balance': [150, 140, 130, 280, 260],
'date2' : [datetime.datetime(2021,3,1), datetime.datetime(2021,4,1),
datetime.datetime(2021,5,1), datetime.datetime(2021,1,1),
datetime.datetime(2021,2,1)]
})
ddf = dd.from_pandas(pdf, npartitions=1)
def func2(df):
return df.date2.month
x = ddf.map_partitions(func2) # <-- fails here
要访问 datetime
函数,需要使用 .dt
accessor,因此在这种情况下的修复是:
def func2(df):
return df.date2.dt.month
请注意,在这种情况下,该函数接受一个数据帧,但 returns 一个系列。这很好,但对于某些用例,您可能对修改数据框并返回修改后的版本感兴趣。在这种情况下,该函数将如下所示:
def func2(df):
df['modified_column'] = df.date2.dt.month
return df
注意 pandas' 访问器在 dask 中是受支持的,所以在这种情况下你根本不需要映射函数
x = ddf.date2.dt.month
(评论中也有说明)