【问题标题】:Convert date string YYYY-MM-DD to YYYYMM in pandas在熊猫中将日期字符串 YYYY-MM-DD 转换为 YYYYMM
【发布时间】:2019-09-03 16:00:09
【问题描述】:

pandas 中是否有办法将我的列日期(格式为“1997-01-31”)转换为“199701”,而不包含有关日期的任何信息?

我尝试了以下形式的解决方案:

df['DATE'] = df['DATE'].apply(lambda x: datetime.strptime(x, '%Y%m'))

但我收到此错误:'ValueError: time data '1997-01-31' does not match format '%Y%m''

可能的原因是我没有在格式中包含日期。有没有更好的方法从 YYYY-MM_DD 格式传递到 pandas 中的 YYYYMM?

【问题讨论】:

  • 'DATE' 列的dtype 是什么?是datetime 还是str

标签: python pandas date


【解决方案1】:

一种方法是将日期转换为日期时间,然后使用 strftime。请注意,您确实失去了日期的日期时间功能

df = pd.DataFrame({'date':['1997-01-31' ]})
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.strftime('%Y%m')


    date
0   199701

【讨论】:

    【解决方案2】:

    如果数据足够干净(没有像'foo''001231' 这样的错误字符串),可能不需要进行datetime 转换:

    df = pd.DataFrame({'date':['1997-01-31', '1997-03-31', '1997-12-18']})
    
    df['date'] = [''.join(x.split('-')[0:2]) for x in df.date]
    #     date
    #0  199701
    #1  199703
    #2  199712
    

    或者,如果您有 null 值:

    df['date'] = df.date.str.replace('-', '').str[0:6]
    

    【讨论】:

    • 如果我需要恢复原始格式怎么办?有没有类似的快捷方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2018-05-19
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多