忽略日期时间戳pandas parse_dates的时区偏移部分

时间:2016-05-10 21:52:24

标签: python-2.7 pandas

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偏移?

3 个答案:

答案 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