python熊猫-如何合并一列中的日期和另一列中的时间并创建新列
我有一个来自以下数据库的数据帧: FltDate和ESTAD2都是datetime64[ns]python熊猫-如何合并一列中的日期和另一列中的时间并创建新列,python,pandas,Python,Pandas,我有一个来自以下数据库的数据帧: FltDate和ESTAD2都是datetime64[ns] >>> print df[['Airport', 'FltDate', 'Carrier', 'ESTAD2']] Airport FltDate Carrier ESTAD2 0 EDI 2017-06-18 BACJ 1899-12-30 05:35:00 1 EDI 2017-06-18 BA
>>> print df[['Airport', 'FltDate', 'Carrier', 'ESTAD2']]
Airport FltDate Carrier ESTAD2
0 EDI 2017-06-18 BACJ 1899-12-30 05:35:00
1 EDI 2017-06-18 BA 1899-12-30 06:40:00
2 EDI 2017-06-18 BACJ 1899-12-30 07:00:00
3 EDI 2017-06-18 BA 1899-12-30 07:05:00
4 EDI 2017-06-18 BA 1899-12-30 09:00:00
5 EDI 2017-06-18 I2 1899-12-30 11:05:00
6 EDI 2017-06-18 BA 1899-12-30 11:25:00
7 EDI 2017-06-18 BA 1899-12-30 13:45:00
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 214 entries, 0 to 213
Data columns (total 12 columns):
Airport 214 non-null object
FltDate 214 non-null datetime64[ns]
<snip>
ESTAD2 214 non-null datetime64[ns]
<snip>
dtypes: datetime64[ns](4), object(8)
memory usage: 20.1+ KB
我可以用上述结果替换ESTAD2。。或者创建一个新列作为FltDateTime
尝试了各种方法但失败了。。。就像下面。。。添加失败
>>> df.FltDate.dt.date
0 2017-06-18
1 2017-06-18
2 2017-06-18
>>> df.ESTAD2.dt.time
0 05:35:00
1 06:40:00
2 07:00:00
您可以使用:
替代解决方案:
df['date'] = pd.to_datetime(df.FltDate.dt.strftime('%Y-%m-%d ') +
df.ESTAD2.astype(str).str.split().str[1])
print (df)
Airport FltDate Carrier ESTAD2 date
0 EDI 2017-06-18 BACJ 1899-12-30 05:35:00 2017-06-18 05:35:00
1 EDI 2017-06-18 BA 1899-12-30 06:40:00 2017-06-18 06:40:00
2 EDI 2017-06-18 BACJ 1899-12-30 07:00:00 2017-06-18 07:00:00
3 EDI 2017-06-18 BA 1899-12-30 07:05:00 2017-06-18 07:05:00
4 EDI 2017-06-18 BA 1899-12-30 09:00:00 2017-06-18 09:00:00
5 EDI 2017-06-18 I2 1899-12-30 11:05:00 2017-06-18 11:05:00
6 EDI 2017-06-18 BA 1899-12-30 11:25:00 2017-06-18 11:25:00
7 EDI 2017-06-18 BA 1899-12-30 13:45:00 2017-06-18 13:45:00
thk u。只是想知道为什么我们不能直接使用df.FltDate.dt.date和df.ESTAD2.dt.time和一些加法或datetime concat函数。不使用stftime。strftime是最理想的解决方案吗?请解释一下。我问这个问题是因为我已经有了datetime对象权限。。那为什么还要麻烦转换成字符串,然后再转换回datetime呢?我的第一个解决方案是转换成date、time、timedelta,但我认为这更快更简单。是的,但是panas中的
date
和time
都是对象,所以使用函数确实有问题。所以有必要把它转换成日期时间-我觉得太复杂了。。。出于某种原因,第0行在我的计算机中显示新列“日期”为2017-06-19 11:35:00(而不是2017-06-18 05:35:00)。这与你的结果不同。可能与时区有关??我在UTC+7。是的,时区可能有问题。检查并尝试df.Date=df.Date.dt.tz_本地化('UTC')。dt.tz_转换('Europe/London')
df['date'] = pd.to_datetime(df.FltDate.dt.strftime('%Y-%m-%d ') +
df.ESTAD2.dt.strftime('%H:%M:%S'))
print (df)
Airport FltDate Carrier ESTAD2 date
0 EDI 2017-06-18 BACJ 1899-12-30 05:35:00 2017-06-18 05:35:00
1 EDI 2017-06-18 BA 1899-12-30 06:40:00 2017-06-18 06:40:00
2 EDI 2017-06-18 BACJ 1899-12-30 07:00:00 2017-06-18 07:00:00
3 EDI 2017-06-18 BA 1899-12-30 07:05:00 2017-06-18 07:05:00
4 EDI 2017-06-18 BA 1899-12-30 09:00:00 2017-06-18 09:00:00
5 EDI 2017-06-18 I2 1899-12-30 11:05:00 2017-06-18 11:05:00
6 EDI 2017-06-18 BA 1899-12-30 11:25:00 2017-06-18 11:25:00
7 EDI 2017-06-18 BA 1899-12-30 13:45:00 2017-06-18 13:45:00
df['date'] = pd.to_datetime(df.FltDate.dt.strftime('%Y-%m-%d ') +
df.ESTAD2.astype(str).str.split().str[1])
print (df)
Airport FltDate Carrier ESTAD2 date
0 EDI 2017-06-18 BACJ 1899-12-30 05:35:00 2017-06-18 05:35:00
1 EDI 2017-06-18 BA 1899-12-30 06:40:00 2017-06-18 06:40:00
2 EDI 2017-06-18 BACJ 1899-12-30 07:00:00 2017-06-18 07:00:00
3 EDI 2017-06-18 BA 1899-12-30 07:05:00 2017-06-18 07:05:00
4 EDI 2017-06-18 BA 1899-12-30 09:00:00 2017-06-18 09:00:00
5 EDI 2017-06-18 I2 1899-12-30 11:05:00 2017-06-18 11:05:00
6 EDI 2017-06-18 BA 1899-12-30 11:25:00 2017-06-18 11:25:00
7 EDI 2017-06-18 BA 1899-12-30 13:45:00 2017-06-18 13:45:00