蟒蛇熊猫.按单独列拆分的日期对象



我在Python(熊猫(中有日期写成"1/31/2010"。要应用线性回归,我希望有 3 个单独的变量:天数、月数、年数。

将熊猫中带有日期的列拆分为 3 列的方法是什么? 另一个问题是将相同但分组的日子分为 3 组:1-10、11-20、21-31。

df['date'] = pd.to_datetime(df['date'])
#Create 3 additional columns
df['day'] = df['date'].dt.day
df['month'] = df['date'].dt.month
df['year'] = df['date'].dt.year

理想情况下,您无需创建 3 个额外的列即可执行此操作,您只需将Series传递给您的函数即可。

In [2]: pd.to_datetime('01/31/2010').day
Out[2]: 31
In [3]: pd.to_datetime('01/31/2010').month
Out[3]: 1
In [4]: pd.to_datetime('01/31/2010').year
Out[4]: 2010

这只回答了你的第一个问题

一种解决方案是使用 operator.attrgetter 提取pd.Timestamp对象的属性。

此方法的好处是您可以轻松扩展/更改所需的属性。此外,逻辑并非特定于对象类型。

from operator import attrgetter
import pandas as pd
df = pd.DataFrame({'date': ['1/21/2010', '5/5/2015', '4/30/2018']})
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')
attr_list = ['day', 'month', 'year']
attrs = attrgetter(*attr_list)
df[attr_list] = df['date'].apply(attrs).apply(pd.Series)
print(df)
        date  day  month  year
0 2010-01-21   21      1  2010
1 2015-05-05    5      5  2015
2 2018-04-30   30      4  2018
from datetime import datetime
import pandas as pd
df = pd.DataFrame({'yyyymmdd': ['20150204', '20160305']})
for col, field in [("year", "%Y"), ("month", "%m"), ("day", "%d")]:
    df[col] = df["yyyymmdd"].apply(
        lambda cell: datetime.strptime(cell, "%Y%m%d").strftime(field))
    
print(df)
   yyyymmdd  year month day
0  20150204  2015    02  04
1  20160305  2016    03  05

最新更新