熊猫-错误的星期从日期中提取

时间:2020-01-08 13:20:40

标签: python pandas

我正在尝试从“时间”列中提取星期。

  • 正确的值为52。
  • 我得到的值为1。

有什么解决方法吗?

下面的代码和结果:

import pandas as pd

#create df
df = pd.DataFrame(columns = ['TIME','FACILITY'])
df['TIME'] = ['12/30/2019  11:18:29 PM']
df['TIME']=pd.to_datetime(df['TIME'])
df['FACILITY'] = ['C201']

#Extract week
df['WW'] = df['TIME'].dt.week

enter image description here

4 个答案:

答案 0 :(得分:3)

正如Maku所说,不幸的是,这在技术上是正确的。如果您确实希望所有2019年的日期都在该周的“一组”上,则进行手动修复:

df['M'] = df.dt.month
df['Y'] = df.dt.year
df['WW'] = df.dt.week
df['WW'] = df.apply(lambda x: df.loc[df.Y == x.Y, 'WW'].max() + 1 if x.WW == 1 and x.month = 12 else x.WW)

这基本上检查它是12月= 1的日期,并将其更改为该年的最后一部分。

注意:有了这个,2019-12-30在第53周,因为它是第52周星期日之后的星期一。

答案 1 :(得分:2)

从技术上讲,即使您应用dt.weekofyear

,也是正确的

您可以改为使用lambda对其进行强制:

# Note: You can modify the static value '52' and make it more better
df['TIME'].apply(lambda x : 52 if x.year == 2019 else x.week)

答案 2 :(得分:2)

我认为这是您要寻找的:

import pandas as pd

df = pd.DataFrame(columns = ['TIME','FACILITY'])
df['TIME'] = ['12/30/2019  11:18:29 PM']
df['TIME']= pd.to_datetime(df['TIME'])
df['FACILITY'] = ['C201']

df['WW'] = df['TIME'].dt.strftime("%U")

print(df)

结果:

                 TIME FACILITY  WW
0 2019-12-30 23:18:29     C201  52

答案 3 :(得分:0)

该问题的通用解决方案如下,数据框 temp 是一个带有时间戳和一年中的第几周的数据集

def weekofmonthc(dt1):  if (dt1.month == 12) and (dt1.weekofyear == 1):    mmaxw = temp[(temp['timestamp_utc'].dt.month == dt1.month) & (temp['timestamp_utc'].dt.year == dt1.year)]['timestamp_utc'].dt.weekofyear.max()    return (mmaxw + 1)  else:    return (dt1.weekofyear)

temp[(temp['timestamp_utc'] > '2014-12-30 23:00:00') & (temp['timestamp_utc'] < '2015-01-01 01:00:00')]['timestamp_utc'].apply(weekofmonthc)