pandas 如何将年、月、日、小时/分钟列转换为单个日期时间列?

ckx4rj1h  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(160)

我有以下数据格式,其中年、月、日和小时_分钟各有不同的列(前两位数是小时,后两位数是分钟)。如何通过合并所有这些现有列来创建日期时间格式的新列?
| 年份|月份|日|小时_分钟|
| - ------|- ------|- ------|- ------|
| 二〇一五年|1个|十五|小零零一零|
| 二〇一五年|1个|第二章|小零零二0|
| 二〇一五年|1个|十五|小零零四五|
| 二〇一五年|1个|十五|小行星2110|
| 二〇一五年|十个|二十一|小行星2359|
我试过以下方法,但没有成功。谢谢你的建议。

df["new_column"]= pd.to_datetime(df[["YEAR", "MONTH", "DAY","HOUR_MINUTE"]])
k97glaaz

k97glaaz1#

您需要将HOUR_MINUTE列拆分为HOUR和MINUTE

df["HOUR"] = df["HOUR_MINUTE"].str[0:2]
df["MINUTE"] = df.pop("HOUR_MINUTE").str[2:4]
df["new_column"] = pd.to_datetime(df[["YEAR", "MONTH", "DAY", "HOUR", "MINUTE"]], format="%Y-%m-%d %H:%M")
print(df)

输出:

YEAR  MONTH  DAY HOUR MINUTE          new_column
0  2015      1   15   00     10 2015-01-15 00:10:00
1  2015      1    2   00     20 2015-01-02 00:20:00
2  2015      1   15   00     45 2015-01-15 00:45:00
3  2015      1   15   21     10 2015-01-15 21:10:00
4  2015     10   21   23     59 2015-10-21 23:59:00
dfddblmv

dfddblmv2#

如果只有year、month和hour_minute列,则可以应用于整个df,如下所示

df.apply(lambda row: pd.to_datetime(''.join(row.values.astype(str)), format="%Y%m%d%H%M") ,axis=1)
Out[198]: 
0   2015-11-05 00:10:00
1   2015-01-20 02:00:00
2   2015-11-05 04:05:00
3   2015-11-05 21:10:00
4   2015-10-21 23:59:00
dtype: datetime64[ns]

如果还有其他列,则只需选择所需列,然后应用

df[['YEAR', 'MONTH', 'DAY', 'HOUR_MINUTE']].apply(lambda row: pd.to_datetime(''.join(row.values.astype(str)), format="%Y%m%d%H%M") ,axis=1)
Out[201]: 
0   2015-11-05 00:10:00
1   2015-01-20 02:00:00
2   2015-11-05 04:05:00
3   2015-11-05 21:10:00
4   2015-10-21 23:59:00
dtype: datetime64[ns]

如果要将new_column赋给df,则

df['new_column'] = df[['YEAR', 'MONTH', 'DAY', 'HOUR_MINUTE']].apply(lambda row: pd.to_datetime(''.join(row.values.astype(str)), format="%Y%m%d%H%M") ,axis=1)
df
Out[205]: 
   YEAR  MONTH  DAY HOUR_MINUTE          new_column
0  2015      1   15        0010 2015-11-05 00:10:00
1  2015      1    2        0020 2015-01-20 02:00:00
2  2015      1   15          45 2015-11-05 04:05:00
3  2015      1   15        2110 2015-11-05 21:10:00
4  2015     10   21        2359 2015-10-21 23:59:00
lnvxswe2

lnvxswe23#

    • 建议的脚本**
import pandas as pd

df1 = pd.DataFrame({'YEAR': ['2015', '2015', '2015', '2015', '2015'],
                   'MONTH': ['1', '1', '1', '1', '10'],
                   'DAY': ['15', '2', '15', '15', '21'],
                   'HOUR_MINUTE': ['0010', '0020', '0045', '2110', '2359']
                   })

df1['FMT'] = df1.agg('-'.join(['{0[%s]}'%c for c in df1.columns]).format, axis=1)
df1['FMT'] = pd.to_datetime(df1['FMT'], format='%Y-%m-%d-%H%M')

print(df1)
    • 产出**
YEAR MONTH DAY HOUR_MINUTE                 FMT
0  2015     1  15        0010 2015-01-15 00:10:00
1  2015     1   2        0020 2015-01-02 00:20:00
2  2015     1  15        0045 2015-01-15 00:45:00
3  2015     1  15        2110 2015-01-15 21:10:00
4  2015    10  21        2359 2015-10-21 23:59:00

相关问题