df = pd.read_csv("data.csv", index_col = 'endDate', parse_dates = True)
csv中的endDate
2016-05-06 15:01:01 -0400
导入后pandas中数据框的endDate索引
2016-05-06 19:01:01
如何忽略csv中的-0400偏移?
答案 0 :(得分:3)
我认为这里最好的事情是最初不进行解析,以便您可以删除时区信息然后转换:
In [14]:
t="""date
2016-05-06 15:01:01 -0400"""
df = pd.read_csv(io.StringIO(t),index_col=[0])
df.index = df.index.str.rsplit().str[0:-1].str.join(' ')
df.index = pd.to_datetime(df.index)
df
Out[14]:
Empty DataFrame
Columns: []
Index: [2016-05-06 15:01:01]
所以这里的日期导入为str
所以我们现在使用str.rsplit
删除时区,然后再次加入,但没有时区信息。然后,我们可以使用to_datetime
转换为datetime
答案 1 :(得分:2)
我会这样做:
filename = '/path/to/file.csv'
df = pd.read_csv(filename, index_col='endDate', parse_dates=['endDate'],
date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0]))
测试:
data = """\
endDate,val
2016-05-06 15:01:01 -0400,11
2016-05-06 20:20:20 -0100,12
"""
df = pd.read_csv(io.StringIO(data), index_col='endDate', parse_dates=['endDate'],
date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0]))
输出:
In [119]: df = pd.read_csv(io.StringIO(data), index_col='endDate', parse_dates=['endDate'],
.....: date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0]))
In [120]: df
Out[120]:
val
endDate
2016-05-06 15:01:01 11
2016-05-06 20:20:20 12
答案 2 :(得分:1)
您可以将列表推导与str.split()一起使用。
df = pd.DataFrame({'endDate': ['2016-05-06 15:01:01 -0400', '2016-05-06 16:01:01 -0400']})
df['endDate'] = pd.to_datetime([date + " " + time
for date, time, _ in df.endDate.str.split()])
>>> df
endDate
0 2016-05-06 15:01:01
1 2016-05-06 16:01:01