如何将 pandas 中的日期转换为整数

问题描述 投票:0回答:2

我在 pandas 数据框中有一个格式为 mm/dd/yyyy 的日期列,我想将其转换为格式为 yyyymmdd 的整数。使用日期时间可以吗?

python pandas datetime
2个回答
2
投票

您可以直接修改字符串并转换为整数(更有效),也可以转换为日期时间、格式化为字符串并转换为整数(可能更方便/可读)。

例如:

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

1
投票

您可以将年 * 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
© www.soinside.com 2019 - 2024. All rights reserved.