首页 > 解决方案 > 更改 Pandas 中特定单元格的日期格式

问题描述

我正在使用一个包含日期列的大型数据集(超过 200 万行 x 10 列)。某些行的格式正确(例如 2020/04/08),但我想更改其他不正确的格式(具体而言,这些行的格式为 20200408)。

我想更改错误的格式,但我不想遍历所有行。

通常,对于一个小数据集,我会做

for i in range (0,len(df)):
    cell=str(df.iloc[i]['date'])
    if len(cell)==8:
        df.iat[i, df.columns.get_loc('date')] = datetime.strptime(cell, '%Y%m%d').strftime('%Y-%m-%d')

但我知道这远非最佳。

如何使用 pandas 的力量来避免这里的循环?

谢谢!

标签: pythonpandasloopsfor-loopif-statement

解决方案


过滤行Series.str.len,然后选择列DataFrame.loc和掩码,转换为日期时间to_datetime,最后转换为自定义格式Series.dt.strftime

m = df['date'].str.len() == 8
df.loc[m, 'date'] = pd.to_datetime(df.loc[m, 'date'], format='%Y%m%d').dt.strftime('%Y-%m-%d')

推荐阅读