Pandas将datetime字符串列转换为datetime而不应用offset

时间:2018-05-17 10:02:35

标签: python pandas datetime

我是Python和Pandas的新手,所以不要对我这么难:)

我有" 2014-01-01 00:00:00-06:00"形式的多个列。现在我想将列名转换为pandas datetime。但我挣扎着我需要使用的格式。我已经尝试了

date = pd.to_datetime("2014-01-01 00:00:00-06:00", format='%Y-%m-%d %H:%M:%S%z')

但是我在"ValueError: time data '2014-01-01 00:00:00-06:00' does not match format '%Y-%m-%d %H:%M:%S%Z' (match)"

时收到错误

我不想把时间转换成我的时区。我需要时区-06:00

对于此输入:

  

2014-01-01 00:00:00-06:00

输出应为:

  

2014-01-01 00:00:00

我想使用输出的日期变量,这样我就可以将数据分成季节。像这样:

date > springBegining

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

你不需要格式字符串,pandas足以处理这个问题:

In[2]:
pd.to_datetime('2014-01-01 00:00:00-06:00')

Out[2]: Timestamp('2014-01-01 06:00:00')

除了你的格式字符串有很多问题:

%b是月份作为语言环境的缩写形式,你有一个数字表示,所以它应该是%m

%z需要'+HHMM'/-HHMM

形式的UTC偏移量

因此您需要将日期时间字符串重新格式化为:

'2014-01-01 00:00:00-0600'

如果您不希望应用偏移并且偏移量始终相同,则可以从字符串中删除它:

In[25]:
pd.to_datetime('2014-01-01 00:00:00-06:00'.rsplit('-',1)[0])

Out[25]: Timestamp('2014-01-01 00:00:00')

或者你可以切片:

In[26]:
pd.to_datetime('2014-01-01 00:00:00-06:00'[:-6])

Out[26]: Timestamp('2014-01-01 00:00:00')

所以要在整个列上执行以上操作:

pd.to_datetime(df[col].str[:-6])

示例:

In[27]:
df = pd.DataFrame({'date':['2014-01-01 00:00:00-06:00','2014-01-01 00:00:00+06:00']})
df

Out[27]: 
                        date
0  2014-01-01 00:00:00-06:00
1  2014-01-01 00:00:00+06:00

In[28]:
pd.to_datetime(df['date'].str[:-6])

Out[28]: 
0   2014-01-01
1   2014-01-01
Name: date, dtype: datetime64[ns]

在这里,我们使用字符串访问器.str以相同的方式对所有列进行切片,并将其传递给to_datetime以转换整个列