我正在尝试将 pandas.core.series.Series
分配给 Pandas 数据框列。
首先我创建一个函数:
####################################### set month #################################
import datetime
import pandas as pd
actual_date = datetime.now()
actual_date = datetime.strptime("{}/{}/{}".format('01', actual_date.month, actual_date.year), "%d/%m/%Y")
def set_date(actual_date):
result = actual_date - dateutil.relativedelta.relativedelta(months=1)
print(datetime.strftime(result, "%d/%m/%Y"))
然后我将它应用到 Pandas df 并将其定义为 pd_object
,它返回一个包含 pandas.core.series.Series
输出的 set_date()
类型:
pd_object = pd.Series(df.apply(lambda x: set_date(actual_date), axis=1));
然后,当我将它分配给一个新的 col df['month']=pd_object
时,它会返回一个充满 None
行的 Pandas 数据框列,而预期结果必须是 set_date()
这些行的输出。
如何将 pd_object
分配给新的 Pandas 数据框列?
答案 0 :(得分:1)
您的 set_date
函数仅打印,但不返回任何内容,即 None
。这就是您获得所有 None
的原因。也许你的意思是:
def set_date(actual_date):
result = actual_date - dateutil.relativedelta.relativedelta(months=1)
return datetime.strftime(result, "%d/%m/%Y")
# your `apply` code seems to return a single, constant value for the whole dataframe
# you can just let Pandas broadcast that to the whole data
df['month'] = set_date(actual_date)