如何将数据框中的多列合并为 Pandas 日期时间格式

Posted

技术标签:

【中文标题】如何将数据框中的多列合并为 Pandas 日期时间格式【英文标题】:How to combine multiple columns in a Data Frame to Pandas datetime format 【发布时间】:2018-09-18 00:30:09 【问题描述】:

我有一个熊猫数据框,其值如下

ProcessID1 UserID Date Month Year Time 248 Tony 29 4 2017 23:30:56 436 Jeff 28 4 2017 20:02:19 500 Greg 4 5 2017 11:48:29 我想知道有什么方法可以将日期、月份和年份和时间的列组合成pd.datetimeformat?

【问题讨论】:

Combine Date and Time columns using python pandas的可能重复 Pandas: create timestamp from 3 columns: Month, Day, Hour的可能重复 【参考方案1】:

将列连接在一起为字符串格式,并使用 pd.to_datetime 转换为日期时间。

import pandas as pd
import io

txt = """
ProcessID1  UserID   Date   Month    Year     Time 
        248    Tony     29       4   2017  23:30:56
        436    Jeff     28       4   2017  20:02:19
        500    Greg      4       5   2017  11:48:29
"""

df = pd.read_csv(io.StringIO(txt), sep="[\t ,]+")

df['Datetime'] =  pd.to_datetime(df['Date'].astype(str) \
                                 + '-' + df['Month'].astype(str) \
                                 + '-' + df['Year'].astype(str) \
                                 + ' ' + df['Time'], 
                                 format='%d-%m-%Y %H:%M:%S')
df

【讨论】:

【参考方案2】:
import pandas as pd

您也可以使用apply() 方法来做到这一点:-

df['Datetime']=df[['Year','Month','Date']].astype(str).apply('-'.join,1)+' '+df['Time']

最后使用pandasto_datetime()方法将'Datetime'转换为日期时间dtype:-

df['Datetime']=pd.to_datetime(df['Datetime'])

df的输出:

    ProcessID1  UserID   Date   Month   Year    Time        Datetime
0   248          Tony     29    4       2017    23:30:56    2017-04-29 23:30:56
1   436          Jeff     28    4       2017    20:02:19    2017-04-28 20:02:19
2   500          Greg      4    5       2017    11:48:29    2017-05-04 11:48:29

现在,如果您想删除 'Date''Month''Year''Time' 列然后使用:-

df=df.drop(columns=['Date','Month','Year', 'Time'])

【讨论】:

【参考方案3】:

使用to_datetime 与自动转换列Day,Month,Year 并添加times 转换to_timedelta

df['Datetime'] = pd.to_datetime(df.rename(columns='Date':'Day')[['Day','Month','Year']]) + \
                 pd.to_timedelta(df['Time'])

另一种解决方案是先加入所有转换为strings 的列:

df['Datetime'] = pd.to_datetime(df[['Date','Month','Year', 'Time']]
                   .astype(str).apply(' '.join, 1), format='%d %m %Y %H:%M:%S')
df['Datetime']  = (pd.to_datetime(df['Year'].astype(str) + '-' +
                                  df['Month'].astype(str) + '-' +
                                  df['Date'].astype(str) + ' ' +
                                  df['Time']))

print (df)
   ProcessID1 UserID  Date  Month  Year      Time            Datetime
0         248   Tony    29      4  2017  23:30:56 2017-04-29 23:30:56
1         436   Jeff    28      4  2017  20:02:19 2017-04-28 20:02:19
2         500   Greg     4      5  2017  11:48:29 2017-05-04 11:48:29

如果需要,最后删除这些列:

df = df.drop(['Date','Month','Year', 'Time'], axis=1)
print (df)
   ProcessID1 UserID            Datetime
0         248   Tony 2017-04-29 23:30:56
1         436   Jeff 2017-04-28 20:02:19
2         500   Greg 2017-05-04 11:48:29

【讨论】:

我试过上面的代码。它给了我 KeyError: ('Day', 'Month', 'Year') @JitheshErancheri - print (df.columns.tolist()) 是什么?错误意味着没有某些列。或者也许使用一些旧的熊猫版本? first solution is implemented in pandas 0.18.1 它给出'UserID'、'Date'、'Month'、'Year'、'Time' 在第一个解决方案中,您似乎忘记了rename - df.rename(columns='Date':'Day') 我可以和你分享

以上是关于如何将数据框中的多列合并为 Pandas 日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pandas 数据框中的字符串转换为“日期”数据类型?

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期

将熊猫数据框中的多列更改为日期时间

将 2 列中的值合并为 pandas 数据框中的单列

如何在支持多种数据格式的 Pandas 中合并日期?

将 unix 时间转换为 pandas 数据框中的可读日期