我是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
感谢您的帮助
答案 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
因此您需要将日期时间字符串重新格式化为:
'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
以转换整个列