pandas 将 Dataframe 的索引从yyyy-mm-dd转换为yyyy-mm

yrdbyhpb  于 2023-04-28  发布在  其他
关注(0)|答案(3)|浏览(73)

我有一个索引为yyyy-mm-dd的dataframe,我想只将其设置为yyyy-mm。您能帮助我吗?HHC

gblwokeq

gblwokeq1#

使用strftime如下:

from datetime import date
import pandas as pd
td = date.today()

datelist = pd.date_range(td, periods=100).tolist()
d = {'data': list(range(10)),
     'index': pd.date_range(td, periods=10).tolist()}
df = pd.DataFrame(d).set_index('index')
display(df)
df.index = pd.to_datetime(df.index)
df.index = df.index.strftime("%Y %m")
df.head()
7nbnzgx9

7nbnzgx92#

你有两种可能:
如果索引包含日期作为字符串:

df.index = pd.to_datetime(df.index).to_period('M')

# OR

df.index = pd.to_datetime(df.index).strftime('%Y-%m')

如果你的索引已经是DatetimeIndex,你可以这样做:

df.index = df.index.to_period('M')

# OR

df.index = df.index.strftime('%Y-%m')

示例:

>>> df
            col
2023-01-01    1
2023-02-01    2
2023-03-01    3
2023-04-01    4

# df.index = pd.to_datetime(df.index).to_period('M')
>>> df.index
PeriodIndex(['2023-01', '2023-02', '2023-03', '2023-04'], dtype='period[M]')

# df.index = pd.to_datetime(df.index).strftime('%Y-%m')
>>> Index(['2023-01', '2023-02', '2023-03', '2023-04'], dtype='object')

如果你想处理一些日期操作,PeriodIndex更有用。
要了解strftime的每个格式代码,请参阅文档

oyt4ldly

oyt4ldly3#

import pandas as pd
from datetime import datetime
import numpy as np

# Generate dates
date_rng = pd.date_range(start='1/1/2023', end='1/08/2024', freq='D')

# Create Pandas dataframe
df = pd.DataFrame(date_rng, columns=['date'])

# Add column with random numbers as number as records we generated
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
#display(df)

# Convert the data frame index to a datetime index
df['datetime'] = pd.to_datetime(df['date'])
df = df.set_index('datetime')
# delete\drop date column
df.drop(['date'], axis=1, inplace=True)
#df.head()

#=====================> Approach#1 <======================
# Manipulate index to convert yyyy-mm-dd to yyyy-mm format
df.index = df.index.strftime("%Y-%m")
#=====================> Approach#2 <======================
# Manipulate index to convert yyyy-mm-dd to yyyy-mm format 
#df.index = pd.to_datetime(df.index).strftime('%Y-%m')
print(df)

输出:

#datetime      
#2023-01     89
#2023-01     10
#2023-01     29
#2023-01     54
#2023-01     73
#...        ...
#2024-01     93
#2024-01     97
#2024-01     85
#2024-01     36
#2024-01     80

参考文献:

相关问题