我有一个包含15列的文件,前5个是日期和时间列["year", "month", "day", "hour", "min"...]
,我想将两个时间列组合在一起,使它们成为时间列,格式为“ H:M”,这样我很容易选择特定时间范围(例如19:00-24:00)的数据。
我一直在寻找解决方案,但是所有显示的内容都无法正常运行,而这全都取决于如何处理日期而不是时间。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您应该使用datetime
对象,这使使用日期和时间对象非常简单。实际上,pandas.to_datetime
的构建完全是为了解析您所拥有的列。 (您至少需要一个年,月和日列才能进行此解析)
import pandas as pd
df = pd.DataFrame({'year': [2001, 2012],
'month': [1, 12],
'day': [16, 19],
'hour': [1, 23],
'minutes': [5, 35],
'val1': [1.23, 1.151]})
df['Date'] = pd.to_datetime(df[['year', 'month', 'day', 'hour', 'minutes']])
print(df)
# year month day hour minutes val1 Date
#0 2001 1 16 1 5 1.230 2001-01-16 01:05:00
#1 2012 12 19 23 35 1.151 2012-12-19 23:35:00
然后,如果您愿意将其设置为index
,则可以使用between_time
的内置功能。</ p>
df.set_index('Date').between_time('19:00', '23:40')
# year month day hour minutes val1
#Date
#2012-12-19 23:35:00 2012 12 19 23 35 1.151
答案 1 :(得分:0)
假设df是具有这5列的数据框。您需要创建一个新列并将其设置为等于小时+“:” +分钟。
df['time'] = (df['hour'].astype(str) + ":" + df['min'].astype(str))
但是,我认为这种格式对于大多数数据处理而言会更好:
df['time'] = (df['hour'].astype(str) + df['min'].astype(str))
请注意:如果astype(str)
和df['hour']
是熊猫数据框中的字符串类型,则不需要df['min']
。