将熊猫日期转换为周数

时间:2015-07-02 09:51:04

标签: python-3.x pandas datetime

我想从pandas数据框中的数据中提取一个周数。

日期格式为datetime64 [ns]

我已将日期标准化,以便从中删除时间

df['Date'] = df['Date'].apply(pd.datetools.normalize_date)

所以日期现在看起来像 - 2015-06-17数据框列

现在我想将其转换为周数。

提前致谢

5 个答案:

答案 0 :(得分:45)

只需访问dt周属性:

In [286]:
df['Date'].dt.week

Out[286]:
0    25
dtype: int64

In [287]:
df['Week_Number'] = df['Date'].dt.week
df

Out[287]:
        Date  Week_Number
0 2015-06-17           25

答案 1 :(得分:18)

这是使用strftime的另一种可能性。 strftime.org是一个很好的资源。

df['Week_Number'] = df['Date'].dt.strftime('%U')

'%U'表示年份的周数(星期日作为一周的第一天)作为零填充十进制数。在第一个星期日之前的新年中的所有日子都被认为是在第0周。

如果您有多年的日期,我建议您创建一个年 - 周组合

df['Year-Week'] = df['Date'].dt.strftime('%Y-%U')

答案 2 :(得分:1)

from datetime import date
df_date = pd.DataFrame([date.today()],columns  = ['today'])
print(df_date)
#### Print Output ####
#        today
#0  2019-09-07
df_date['weeknum'] = df_date.today.apply(lambda x:x.isocalendar()[1])
print(df_date)
#### Print Output ####
#        today  weeknum
#0  2019-09-07       36

答案 3 :(得分:0)

Pandas具有其.dayofyear.weekofyear功能,可以直接将其应用于pandas.to_datetime(df['column_name'])的输出,并提供类型“ Timestamp”作为输出。

import pandas as pd
df['formatted_date'] = pd.to_datetime(df['datetime'])
df['day_of_year'] = pd.apply(lambda x: x.dayofyear)
df['week_of_year'] = pd.apply(lambda x: x.weekofyear)

答案 4 :(得分:0)

更新此答案
在我当前的 Python 版本(3.7,2021 年 5 月)中。语法 FutureWarning: weekofyear and week have been deprecated, please use DatetimeIndex.isocalendar().week instead 正在打印以下警告:df['week_number'] = pd.DatetimeIndex(df.index).isocalendar().week 使用 DatetimeIndex 的方法是:# Input time_idx = pd.date_range('2022-01-01', periods=4, freq='H').tz_localize('UTC') values = [9 , 8, 7, 6] df1 = pd.DataFrame(data = values, index=time_idx, columns=['vals']) # FutureWarning: weekofyear and week have been deprecated df1['week_number'] = df1.index.week # Using DatetimeIndex.isocalendar().week instead df2 = pd.DataFrame(data = values, index=time_idx, columns=['vals']) # Does not throws a warning df2['week_number'] = pd.DatetimeIndex(df2.index).isocalendar().week print(df2)
这里是一个使用它返回一个系列的小演示

const csv = require('fast-csv')
const file = fs.createReadStream('main.csv');
var states = []
file
    .pipe(csv.parse({ headers: false }))
    .on('data', row => states.push(row[2]))
console.log(states)