Python 熊猫:将日期和时间合并到一个datetime列中
我有一个13列的数据框,其中两列是日期和时间 我想 1加入日期和时间以及 2正确格式化结果DD.MM.YYYY HH:MM:SSPython 熊猫:将日期和时间合并到一个datetime列中,python,pandas,datetime,Python,Pandas,Datetime,我有一个13列的数据框,其中两列是日期和时间 我想 1加入日期和时间以及 2正确格式化结果DD.MM.YYYY HH:MM:SS Date Time 0 2012-09-27 00:40:20 1 2012-09-27 07:24:37 2 2012-09-27 07:25:08 3 2012-09-27 07:43:48 4 2012-09-27 07:44:27 5 2012-09-27 07:55:16 6 2012-09-27
Date Time
0 2012-09-27 00:40:20
1 2012-09-27 07:24:37
2 2012-09-27 07:25:08
3 2012-09-27 07:43:48
4 2012-09-27 07:44:27
5 2012-09-27 07:55:16
6 2012-09-27 08:04:19
7 2012-09-27 08:08:21
8 2012-09-27 08:09:08
9 2012-09-27 08:15:30
10 2012-09-27 08:15:35
>#dt.strptime(f, '%Y-%m-%d %H:%M:%S')
TypeError: strptime() argument 1 must be str, not Series
所以我试着:
>type(df["Date"])
pandas.core.series.Series
我在想,为什么不把它们都转换成字符串表示形式,并以这种方式操作它们呢
>g = df["Time"].astype(str)
>type(g)
pandas.core.series.Series
什么?!还是连续剧
所以我试着去创造:
>f = df["Date"].astype(str) + " " + df["Time"].astype(str)
>f
0 2012-09-27 00:40:20
1 2012-09-27 07:24:37
2 2012-09-27 07:25:08
3 2012-09-27 07:43:48
嘿!真管用!不,我们只需要正确的格式DD.MM.YYYY HH:MM:SS
Date Time
0 2012-09-27 00:40:20
1 2012-09-27 07:24:37
2 2012-09-27 07:25:08
3 2012-09-27 07:43:48
4 2012-09-27 07:44:27
5 2012-09-27 07:55:16
6 2012-09-27 08:04:19
7 2012-09-27 08:08:21
8 2012-09-27 08:09:08
9 2012-09-27 08:15:30
10 2012-09-27 08:15:35
>#dt.strptime(f, '%Y-%m-%d %H:%M:%S')
TypeError: strptime() argument 1 must be str, not Series
仍然是一个系列…嗯…显然它不会让自己被转换。我们试试别的吧
>f = p.concat([df["Date"], df["Time"]], axis=1)
>f
Date Time
0 2012-09-27 00:40:20
1 2012-09-27 07:24:37
2 2012-09-27 07:25:08
很好!但是这两个专栏不是还
>f.shape
(100,2)
对……回到原点
我没有主意了
有人吗?.astypestr处理序列的元素,而不是序列本身,因此当然是typedf[Time].astypestr==pd.Series。这似乎是你大部分困惑的根源,你是根据这部剧而不是它的元素来行动的
其中一个解决方案可能是一种更简单的方法,即在序列上循环:
dts = [datetime.datetime.strptime(elem, '%Y-%m-%d%H:%M:%S')
for elem in df['Date'] + df['Time']]
fmted = [elem.strftime('%d-%m-%Y %H:%M:%S') for elem in dts]
df.insert(0, 'DateTime', fmted)
.astypestr作用于序列的元素,而不是序列本身,因此当然typedf[Time].astypestr==pd.Series。这似乎是你大部分困惑的根源,你是根据这部剧而不是它的元素来行动的
其中一个解决方案可能是一种更简单的方法,即在序列上循环:
dts = [datetime.datetime.strptime(elem, '%Y-%m-%d%H:%M:%S')
for elem in df['Date'] + df['Time']]
fmted = [elem.strftime('%d-%m-%Y %H:%M:%S') for elem in dts]
df.insert(0, 'DateTime', fmted)
这些列可以合并并分配给数据框中的新列或现有列:
df['datetime'] = df['dates'] + " " + df['time']
输出示例:
dates time datetime
0 2012-09-27 00:40:20 2012-09-27 00:40:20
1 2012-09-27 07:24:37 2012-09-27 07:24:37
2 2012-09-27 07:25:08 2012-09-27 07:25:08
这些列可以合并并分配给数据框中的新列或现有列:
df['datetime'] = df['dates'] + " " + df['time']
输出示例:
dates time datetime
0 2012-09-27 00:40:20 2012-09-27 00:40:20
1 2012-09-27 07:24:37 2012-09-27 07:24:37
2 2012-09-27 07:25:08 2012-09-27 07:25:08
我认为您需要使用以下内容连接列: 如果有带时间的datetime:
print (type(df.loc[0, 'Date']))
<class 'datetime.date'>
print (type(df.loc[0, 'Time']))
<class 'datetime.time'>
df['datetime'] = pd.to_datetime(df["Date"].astype(str) + " " + df["Time"].astype(str))
我认为您需要使用以下内容连接列: 如果有带时间的datetime:
print (type(df.loc[0, 'Date']))
<class 'datetime.date'>
print (type(df.loc[0, 'Time']))
<class 'datetime.time'>
df['datetime'] = pd.to_datetime(df["Date"].astype(str) + " " + df["Time"].astype(str))
我使用了您的实现,现在它可以工作了。谢谢您的实现也满足了我所追求的格式。我使用了您的实现,现在它可以工作了。谢谢您的实现也满足了我所追求的格式。奇怪的是,这无法更有效地解决。但无论如何,谢谢你们所有人的回答。奇怪的是,这个问题无法得到更有效的解决。但无论如何,谢谢你们的回答。