尝试将公式应用于熊猫中的日期列

时间:2019-04-15 18:35:03

标签: pandas

我有这个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的启示吗?

2 个答案:

答案 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')。