更改熊猫中特定单元格的日期格式

时间:2020-04-08 12:10:36

标签: python pandas loops for-loop if-statement

我正在处理一个具有日期列的大型数据集(超过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')

但是我知道这远非最佳。

我如何利用熊猫的力量来避免这里的循环?

谢谢!

2 个答案:

答案 0 :(得分:0)

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')

答案 1 :(得分:0)

尝试

df['datetime'] = df['datetime'].apply(lambda x: x.to_datetime())