Python Pandas:将日期列转为指定格式并保留datetime64类型
问题
我从CSV文件创建了一个DataFrame,其中包含一列格式为11.01.2023的日期值。尝试替换分隔符及使用pd.to_datetime转换后,该列数据类型变为datetime64[ns],但显示格式为yyyy-mm-dd。请问如何将该Date列转换为dd/mm/yyyy或dd.mm.yyyy格式,同时保持datetime64数据类型?
示例代码
import pandas as pd df = pd.DataFrame({'Date': {0: '11.01.2023 ', 1: '22.01.2023', 2: '08.02.2023' }, 'Price':{0:123, 1:456, 2:789}})
尝试代码
import pandas as pd df = pd.DataFrame({'Date': {0: '11.01.2023 ', 1: '22.01.2023', 2: '08.02.2023' }, 'Price':{0:123, 1:456, 2:789}}) df['Date'].str.replace('.', '/', regex=False) print(df.dtypes) # Date列仍为object格式 df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) print(df.dtypes) # Date列变为datetime64[ns]格式 print('df', df) # 日期列显示为yyyy-mm-dd格式
解决方法
需要明确:datetime64[ns]类型的日期存储格式和显示格式是分离的,数据本身是时间戳,显示格式只是输出时的表现形式。要保持datetime64类型同时自定义显示格式,有两种常用方式:
1. 设置全局日期显示格式
通过修改pandas的全局配置,让所有datetime类型的列都按指定格式显示:
import pandas as pd # 初始化DataFrame并转换日期类型 df = pd.DataFrame({'Date': {0: '11.01.2023 ', 1: '22.01.2023', 2: '08.02.2023' }, 'Price':{0:123, 1:456, 2:789}}) df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) # 设置全局日期显示格式为dd.mm.yyyy pd.options.display.date_format = '%d.%m.%Y' # 如果要设置为dd/mm/yyyy则用 '%d/%m/%Y' print(df) print(df.dtypes) # 仍为datetime64[ns]类型
2. 针对单列设置临时显示格式
如果不想修改全局配置,可使用style.format方法临时设置单列的显示格式,仅在输出表格时生效:
import pandas as pd df = pd.DataFrame({'Date': {0: '11.01.2023 ', 1: '22.01.2023', 2: '08.02.2023' }, 'Price':{0:123, 1:456, 2:789}}) df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) # 针对Date列设置显示格式为dd/mm/yyyy styled_df = df.style.format({'Date': lambda x: x.strftime('%d/%m/%Y')}) # 如果要dd.mm.yyyy则用 '%d.%m.%Y' display(styled_df) # 在Jupyter环境中显示格式化后的表格 print(df.dtypes) # 数据类型保持datetime64[ns]
注意:不要使用df['Date'].dt.strftime('%d.%m.%Y'),这种方式会将列转换为字符串(object类型),无法保持datetime64类型。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

