我在 pandas 数据框中有一个格式为 mm/dd/yyyy 的日期列,我想将其转换为格式为 yyyymmdd 的整数。使用日期时间可以吗?
您可以直接修改字符串并转换为整数(更有效),也可以转换为日期时间、格式化为字符串并转换为整数(可能更方便/可读)。
例如:
import pandas as pd
# dummy data:
df = pd.DataFrame({'date': ['10/11/2012', '11/12/2013']}) # mm/dd/yyyy
# working with strings...
tmp = df['date'].str.split('/')
df['date_int'] = (tmp.str[2]+tmp.str[0]+tmp.str[1]).astype(int)
# working with datetime...
df['date_int'] = pd.to_datetime(df['date']).dt.strftime('%Y%m%d').astype(int)
两种情况下的输出:
0 20121011
1 20131112
Name: date_int, dtype: int32
您可以将年 * 10000 + 月 * 100 + 日相加:
df = pd.DataFrame({'dt': pd.date_range('2021-01-01', '2021-01-05')})
df['dt_int'] = df['dt'].dt.year * 10000 + df['dt'].dt.month * 100 + df['dt'].dt.day
df
输出:
dt dt_int
0 2021-01-01 20210101
1 2021-01-02 20210102
2 2021-01-03 20210103
3 2021-01-04 20210104
4 2021-01-05 20210105
更新
如果列值是具有已知格式的字符串
mm/dd/yyyy
,您可以连接子字符串并转换为整数:
df = pd.DataFrame({'dt': ['10/11/2012', '11/12/2013']})
df['dt_int'] = (
df['dt'].str[6:] +
df['dt'].str[0:2] +
df['dt'].str[3:5]).astype(int)
与带有
split
的版本相比,这可以节省一些时间:
%%time
df['dt_int'] = (
df['dt'].str[6:] +
df['dt'].str[3:5] +
df['dt'].str[0:2]).astype(int)
CPU times: user 7.08 ms, sys: 646 µs, total: 7.72 ms
Wall time: 6.95 ms
%%time
tmp = df['dt'].str.split('/')
df['dt_int'] = (tmp.str[2]+tmp.str[0]+tmp.str[1]).astype(int)
CPU times: user 16.5 ms, sys: 0 ns, total: 16.5 ms
Wall time: 15.5 ms