如何将数据框中的多列合并为 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.datetime
format?
【问题讨论】:
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']
最后使用pandas
to_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
并添加time
s 转换to_timedelta
:
df['Datetime'] = pd.to_datetime(df.rename(columns='Date':'Day')[['Day','Month','Year']]) + \
pd.to_timedelta(df['Time'])
另一种解决方案是先加入所有转换为string
s 的列:
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 数据框中的字符串转换为“日期”数据类型?