我正在使用具有两列的CSV,一列的日期为月/日/年格式(例如01/15/2019),另一列的时间为12小时制AM表示“ a”,PM表示“ p”。示例:10/9 / 2017,9:50a和10/9 / 2017,3:50p。我想将这两列合并为DateTime对象的一列,例如“ 2017-10-09 09:50:00”和“ 2017-10-09 15:50:00”。
这些恰好在CSV的第2列和第3列中。我用pd.read_csv
尝试了以下选项:
parse_dates = True
:似乎没有任何反应。根据{{1}},结果日期和时间列只是“对象”,而不是DateTime对象。 dtypes
:合并列,但不会产生DateTime对象。 parse_dates = [[2,3]]
:将各个列转换为DateTime对象,但不合并;日期列已正确转换,但时间列以今天的日期结尾,例如parse_dates = [2,3]
。 我也尝试过2019-01-15 15:50:00
,但是我不确定我需要给它什么解析功能-好像熊猫应该能够处理这些日期/时间格式而无需强制。
有什么想法吗?提前致谢。
答案 0 :(得分:3)
在将数据读入数据框后,您可以转换为datetime
。由于您的date
和time
组件分为两个系列,因此尝试直接与pd.read_csv
进行解析可能很困难。
from io import StringIO
x = """date,time
10/9/2017,9:50a
10/9/2017,3:50p"""
# replace StringIO(x) with 'file.csv'
df = pd.read_csv(StringIO(x))
df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'])
print(df)
# date time datetime
# 0 10/9/2017 9:50a 2017-10-09 09:50:00
# 1 10/9/2017 3:50p 2017-10-09 15:50:00
答案 1 :(得分:2)
我想通了,就在@jpp发布他们的解决方案并使用了类似的东西之后:
df = pd.read_csv("rawdata.csv", parse_dates={"Combined": [2,3]})
df['Combined'] = pd.to_datetime(df['Combined'], errors="coerce")
最后一个参数是因为我的数据中包含NaN。基本上:与其他答案一样,请先合并列,然后再使用to_datetime
进行更改。再次感谢。