我有这个df
,其中有数千行,其中一列是date
:
df.head()
显示:
id_code texto date
0 ZZZZZZZZZZZZ ha tenido su corrección 2019-03-31
0 WWWWWWWWWWWW cierra la venta de sus plans 2019-03-29
0 XXXXXXXXXXXX se han reunido en ferraz 2019-03-26
0 AAAAAAAAAAAA marca es buen periodico 2019-03-12
我想将以下公式应用于date
列:
initial_date=(pd.to_datetime("today")- pd.DateOffset(years=1)).strftime('%Y-%m-%d')
final_date=pd.to_datetime("today").strftime('%Y-%m-%d')
df["ponderacion"]=1-(final_date-pd.to_datetime(df.date))/(final_date-initial_date)
但是,当返回df
输出时:
ValueError: format number 1 of "b'2019-04-15'" is not recognized
我应该.decode('UTF-8')
date.values
将它们转换为str然后转换为日期时间吗?
如果是这样,当我尝试解码date.values
输出时:
AttributeError: 'numpy.ndarray' object has no attribute 'decode'
任何人都可以给我一些有关如何克服这个问题并将期望的公式应用于df.date
的启示吗?
答案 0 :(得分:1)
问题的根源是您将日期值保留为字符串。
创建DataFrame后,您应首先转换date
从字符串到datetime
的列:
df.date = pd.to_datetime(df.date)
然后您可以计算初始日期和最终日期:
final_date = pd.to_datetime('today')
initial_date = final_date - pd.DateOffset(years=1)
注意顺序:
final_date
,无需转换为字符串。initial_date
计算为final_date
前一年。否则,秒的小数部分会有所不同。
最后一步是计算您的列:
df['ponderacion'] = 1 - (final_date - df.date)/(final_date - initial_date)
也不转换为字符串。
答案 1 :(得分:0)
使用apply
将字节转换为字符串:
pd.to_datetime(df.date.apply(str, encoding='ascii'))
它将指定的函数(在这种情况下为str
)应用于Series
的每个元素,并且可以为函数指定参数(此处为encoding='ascii'
)。