在python中将str转换为YYYYmmdd格式

2024-04-28 05:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我将年、月和日期分为三列,我将它们连接到一列,然后尝试将此列转换为YYYY/mm/dd格式,如下所示:

dfyz_m_d['dt'] =  '01'# to bring one date of each of the month
dfyz_m_d['CalendarWeek1'] =  dfyz_m_d['year'].map(str) + dfyz_m_d['mon'].map(str) + dfyz_m_d['dt'].map(str)
dfyz_m_d['CalendarWeek'] = pd.to_datetime(dfyz_m_d['CalendarWeek1'], format='%Y%m%d')

但对于1(1月)和10(10月)两个月,我的最终结果只有10月(CalendarWeek comun没有任何1月。基本上,它保留了所有记录,但1月也格式化为10月


Tags: oftomapdate格式dtonedd
3条回答

我喜欢str.pad:)

dfyz_m_d['year'].astype(str) + dfyz_m_d['mon'].astype(str).str.pad(2, 'left', '0') + dfyz_m_d['dt'].astype(str)

它将在左侧填充零,以确保字符串的长度为2。所以1变成了01,但是10保持为10

问题是Jan在数字上是一位数,因此您最终会得到类似2021101的结果,它将被解释为Oct而不是Jan。确保您的mon列始终转换为两位数月份,如果需要,请使用.zfill(2)

dfyz_m_d['year'].astype(str) + dfyz_m_d['mon'].astype(str).str.zfill(2) + dfyz_m_d['dt'].astype(str)

zfill示例

df = pd.DataFrame({'mon': [1,2,10]})

df.mon.astype(str).str.zfill(2)
0    01
1    02
2    10
Name: mon, dtype: object

我通常这样做

pd.to_datetime(df.mon,format='%m').dt.strftime('%m')
0    01
1    02
2    10
Name: mon, dtype: object

此外,如果列的名称正确,请注意名称为年、月和日

df['day'] =  '01'
df['new'] = pd.to_datetime(df.rename(columns={'mon':'month'})).dt.strftime('%m/%d/%Y')
df
   year    mon  day         new
0  2020      1    1  01/01/2020
1  2020      1    1  01/01/2020

相关问题 更多 >