我的.csv
看起来像这样:
date time
0 20190101 181555700
1 20190101 181545515
其中YYYYMMDD
的格式为date
,HHMMSSMMM
的格式为time
(最后的MMM为毫秒)。例如,第一行为2019-01-01 18:15:55.700
是否有一种方法可以直接从pd.read_csv()
进行解析,而不必稍后进行转换?仅使用parse_dates
无效,因为它无法识别格式。我想要的是在数据框中添加一列,并正确解析时间戳,例如
timestamp
0 2019-01-01 18:15:55.700
答案 0 :(得分:4)
您可以将to_timedelta
与unit
选项结合使用,将time
转换为timedelta
并添加到date
:
df = pd.read_csv('file.csv', parse_dates=['date'])
df['date'] = df.date + pd.to_timedelta(df.time, unit='ms')
或:
df = pd.read_csv('file.csv')
df['date'] = pd.to_datetime(df.date) + pd.to_timedelta(df.time, unit='ms')
输出:
date time
0 2019-01-03 02:25:55.700 181555700
1 2019-01-03 02:25:45.515 181545515
每个评论更新:
df['date'] = pd.to_datetime(df.date.astype(str)+df.time.astype(str), format='%Y%m%d%H%M%S%f')
输出:
date time
0 2019-01-01 18:15:55.700 181555700
1 2019-01-01 18:15:45.515 181545515
答案 1 :(得分:1)
我认为这接近您的需求:
import pandas as pd
import datetime as dt
data = pd.read_csv(
'./a.csv',
delimiter='\t',
index_col=0,
parse_dates=[1],
converters={'time': lambda t: dt.datetime.strptime(t, '%H%M%S%f').time()}
)
输出:
date time
0 2019-01-01 18:15:55.700000
1 2019-01-01 18:15:45.515000
经过一番调查,我发现了这一点
data = pd.read_csv(
'./a.csv',
delimiter='\t',
index_col=1,
parse_dates={'datetime': [1, 2]},
converters={'time': lambda t: dt.datetime.strptime(t, '%H%M%S%f').time()}
)
输出为:
datetime
0 2019-01-01 18:15:55.700
1 2019-01-01 18:15:45.515