将日期索引 dtype 从对象更改为日期时间以进行每月可视化
Posted
技术标签:
【中文标题】将日期索引 dtype 从对象更改为日期时间以进行每月可视化【英文标题】:Change Date Index dtype from object to datetime for monthly basis visualisation 【发布时间】:2020-09-27 17:34:42 【问题描述】:我正在处理一个看起来像这样的数据集
Index Month Day Year Temperature in Fahrenheit
0 1 1 2000 77.8
1 1 2 2000 79.3
2 1 3 2000 78.6
3 1 4 2000 78.6
4 1 5 2000 81.1
... ... ... ... ...
7299 12 27 2019 79.3
7300 12 28 2019 80.7
7301 12 29 2019 80.1
7302 12 30 2019 77.5
7303 12 31 2019 74.3
列的类型如下:
Month int64
Day int64
Year int64
Temperature in Fahrenheit float64.
现在,问题陈述是我想将此数据转换为月度数据,取该月天数的平均值。一个sn-p如下图
Date
2000-01 78.241935
2000-02 76.510345
2000-03 80.496774
2000-04 84.100000
2000-05 84.841935
...
2019-08 82.912903
2019-09 81.620000
2019-10 84.287097
2019-11 84.236667
2019-12 81.635484
我希望日期索引(现在是对象类型)的格式为日期时间,以便我可以按月正确地可视化它们。
提前谢谢你。
【问题讨论】:
【参考方案1】:pd.to_datetime
idx = pd.to_datetime(df[['Month', 'Day', 'Year']])
vals = df['Temperature in Fahrenheit'].to_numpy()
pd.Series(vals, idx)
2000-01-01 77.8
2000-01-02 79.3
2000-01-03 78.6
2000-01-04 78.6
2000-01-05 81.1
2019-12-27 79.3
2019-12-28 80.7
2019-12-29 80.1
2019-12-30 77.5
2019-12-31 74.3
dtype: float64
您可以通过 resample
跟进该问题
pd.Series(vals, idx).resample('M').mean()
【讨论】:
【参考方案2】:只是另一种方法:
data=df.groupby(['Year','Month']).apply(lambda x:x['Temperature in Fahrenheit'].sum()).reset_index()
data['Date']=data['Year']+'-'+data['Month']
data.drop(columns=['Year','Month'],inplace=True)
data['Date']=pd.to_datetime(data['Date'],format='%Y-%-m')
【讨论】:
【参考方案3】:另一种方式,可能不像@piRSquared那么短
强制将月、日和年转换为字符串
df[['Month', 'Day', 'Year']]=df.iloc[:, 1:-1].apply(lambda x: x.astype(str))
连接日、月和年并强制转换为日期时间
df['Date']=pd.to_datetime(df.pop('Day').str.cat([df.pop('Month'),df.pop('Year')], sep=' '))
按日期和平均值分组
df.set_index('Date', inplace=True)#Set Date as index
df.groupby(df.index.date).agg(TemperatureinFahrenheit= ('TemperatureinFahrenheit','mean'))#Groupby date and mean
【讨论】:
以上是关于将日期索引 dtype 从对象更改为日期时间以进行每月可视化的主要内容,如果未能解决你的问题,请参考以下文章
将python中索引的日期格式从yyyy-dd-mm更改为yyyy-mm-dd
将 Python Pandas 中的列名从日期时间对象更改为字符串?