Python Pandas DatetimeIndex.hour
Python Pandas DatetimeIndex.hour
我正在尝试在我的数据框中构建 3 个单独的列,用于使用 DatetimeIndex 的时间戳 HOUR、DAY、MONTH 的值。
对于无法复制的数据,我深表歉意,因为我的数据集是从 CSV 文件中读取的。
boilerDf = pd.read_csv('C:\Users\Python Scripts\Deltadata.csv', index_col='Date', parse_dates=True)
print(boilerDf.info())
这个returns:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 23797 entries, 2017-10-25 05:00:08.436000 to 2018-01-02 05:45:14.419000
Data columns (total 3 columns):
hwr 23797 non-null float64
hws 23797 non-null float64
oat 23797 non-null float64
dtypes: float64(3)
memory usage: 743.7 KB
None
我可以在 pandas.pydata.org 网站上看到他们是我尝试做的 3 种方法,除了我想创建单独的数据框(列):
DatetimeIndex.month
DatetimeIndex.day
DatetimeIndex.hour
下面的代码不适用于为日期时间索引的小时添加单独的数据框列...有什么想法吗?
boilerDf['Hour'] = boilerDf.DatetimeIndex.hour
亲切的问候
我也在Github上上传了数据:
bbartling/Data on Github
我最初建议使用 .index.strftime() 作为答案。但是,Henry 还找到了 jezrael 的 的 returns 列的整数类型。因此,我在这里包含了后者的扩展版本。使用两种不同的方法时,输出结果略有不同。
from numpy.random import randint
import pandas as pd
# Create a df with a date-time index with data every 6 hours
rng = pd.date_range('1/5/2018 00:00', periods=5, freq='6H')
df = pd.DataFrame({'Random_Number':randint(1, 10, 5)}, index=rng)
# Getting different time information in columns of type object
df['year'] = df.index.strftime('%Y')
df['month'] = df.index.strftime('%b')
df['date'] = df.index.strftime('%d')
df['hour'] = df.index.strftime('%H')
df['Day_of_week'] = df.index.strftime('%a')
# Getting different time information in columns of type integer
df['year'] = df.index.year
df['month'] = df.index.month
df['date'] = df.index.day
df['hour'] = df.index.hour
df['Day_of_week'] = df.index.dayofweek
df.head()
Random_Number year month date hour Day_of_week
date
2018-01-05 00:00:00 8 2018 Jan 05 00 Fri
2018-01-05 06:00:00 8 2018 Jan 05 06 Fri
2018-01-05 12:00:00 1 2018 Jan 05 12 Fri
2018-01-05 18:00:00 4 2018 Jan 05 18 Fri
2018-01-06 00:00:00 7 2018 Jan 06 00 Sat
Random_Number year month date hour Day_of_week
2018-01-05 00:00:00 3 2018 1 5 0 4
2018-01-05 06:00:00 1 2018 1 5 6 4
2018-01-05 12:00:00 9 2018 1 5 12 4
2018-01-05 18:00:00 5 2018 1 5 18 4
2018-01-06 00:00:00 8 2018 1 6 0 5
我正在尝试在我的数据框中构建 3 个单独的列,用于使用 DatetimeIndex 的时间戳 HOUR、DAY、MONTH 的值。
对于无法复制的数据,我深表歉意,因为我的数据集是从 CSV 文件中读取的。
boilerDf = pd.read_csv('C:\Users\Python Scripts\Deltadata.csv', index_col='Date', parse_dates=True)
print(boilerDf.info())
这个returns:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 23797 entries, 2017-10-25 05:00:08.436000 to 2018-01-02 05:45:14.419000
Data columns (total 3 columns):
hwr 23797 non-null float64
hws 23797 non-null float64
oat 23797 non-null float64
dtypes: float64(3)
memory usage: 743.7 KB
None
我可以在 pandas.pydata.org 网站上看到他们是我尝试做的 3 种方法,除了我想创建单独的数据框(列):
DatetimeIndex.month
DatetimeIndex.day
DatetimeIndex.hour
下面的代码不适用于为日期时间索引的小时添加单独的数据框列...有什么想法吗?
boilerDf['Hour'] = boilerDf.DatetimeIndex.hour
亲切的问候
我也在Github上上传了数据: bbartling/Data on Github
我最初建议使用 .index.strftime() 作为答案。但是,Henry 还找到了 jezrael 的
from numpy.random import randint
import pandas as pd
# Create a df with a date-time index with data every 6 hours
rng = pd.date_range('1/5/2018 00:00', periods=5, freq='6H')
df = pd.DataFrame({'Random_Number':randint(1, 10, 5)}, index=rng)
# Getting different time information in columns of type object
df['year'] = df.index.strftime('%Y')
df['month'] = df.index.strftime('%b')
df['date'] = df.index.strftime('%d')
df['hour'] = df.index.strftime('%H')
df['Day_of_week'] = df.index.strftime('%a')
# Getting different time information in columns of type integer
df['year'] = df.index.year
df['month'] = df.index.month
df['date'] = df.index.day
df['hour'] = df.index.hour
df['Day_of_week'] = df.index.dayofweek
df.head()
Random_Number year month date hour Day_of_week
date
2018-01-05 00:00:00 8 2018 Jan 05 00 Fri
2018-01-05 06:00:00 8 2018 Jan 05 06 Fri
2018-01-05 12:00:00 1 2018 Jan 05 12 Fri
2018-01-05 18:00:00 4 2018 Jan 05 18 Fri
2018-01-06 00:00:00 7 2018 Jan 06 00 Sat
Random_Number year month date hour Day_of_week
2018-01-05 00:00:00 3 2018 1 5 0 4
2018-01-05 06:00:00 1 2018 1 5 6 4
2018-01-05 12:00:00 9 2018 1 5 12 4
2018-01-05 18:00:00 5 2018 1 5 18 4
2018-01-06 00:00:00 8 2018 1 6 0 5