Python 从时间戳中删除特定字符
我有一个非常奇怪的时间格式,数据帧Python 从时间戳中删除特定字符,python,jupyter-notebook,datetime-format,python-datetime,Python,Jupyter Notebook,Datetime Format,Python Datetime,我有一个非常奇怪的时间格式,数据帧df带有列时间戳: 2016-10-25T09:34:52.051713+01:00 2016-10-25T09:46:14.051620+01:00 2016-10-25T09:51:16.052435+01:00 .... 但我需要把这些数据用作时间信息。首先,我想去掉最后13个字符,这样看起来 2016-10-25T09:34:52 2016-10-25T09:46:14 2016-10-25T09:51:16 .... 为了做到这一点,我尝试了 df
df
带有列时间戳
:
2016-10-25T09:34:52.051713+01:00
2016-10-25T09:46:14.051620+01:00
2016-10-25T09:51:16.052435+01:00
....
但我需要把这些数据用作时间信息。首先,我想去掉最后13个字符,这样看起来
2016-10-25T09:34:52
2016-10-25T09:46:14
2016-10-25T09:51:16
....
为了做到这一点,我尝试了
df['TIMESTAMP'] = df.apply(lambda x: x['TIMESTAMP'][:-13], axis = 1)
从
但我收到了错误:
TypeError: string indices must be integers
我不明白。我刚刚接触python,但我没有发现我做错了什么?请用下面的代码替换转换语句
df['TIMESTAMP'] = df['TIMESTAMP'].apply(lambda x: x[-4:])
这将对名为time stamp的整个列应用转换函数,并使用相同的列名将其保存回来。您的问题的严格答案是使用
str
访问器,它可以像普通字符串一样获取一个片段,并将该片段应用于系列中的每个值:
data = ['2016-10-25T09:34:52.051713+01:00',
'2016-10-25T09:46:14.051620+01:00',
'2016-10-25T09:51:16.052435+01:00']
s = pd.Series(data)
print(s.str[:-13])
输出:
0 2016-10-25T09:34:52
1 2016-10-25T09:46:14
2 2016-10-25T09:51:16
0 2016-10-25 09:34:52.051713+01:00
1 2016-10-25 09:46:14.051620+01:00
2 2016-10-25 09:51:16.052435+01:00
dtype: datetime64[ns, pytz.FixedOffset(60)]
但是,我认为您需要的实际上是pd.to_datetime
,这将(在合理范围内)推断数据的格式并将其转换为datetime
对象:
print(pd.to_datetime(s))
输出:
0 2016-10-25T09:34:52
1 2016-10-25T09:46:14
2 2016-10-25T09:51:16
0 2016-10-25 09:34:52.051713+01:00
1 2016-10-25 09:46:14.051620+01:00
2 2016-10-25 09:51:16.052435+01:00
dtype: datetime64[ns, pytz.FixedOffset(60)]
一种简单的方法是使用列表理解:
df = pd.DataFrame({'TIMESTAMP' : ["2016-10-25T09:34:52.051713+01:00", "2016-10-25T09:46:14.051620+01:00"]})
TIMESTAMP
0 2016-10-25T09:34:52.051713+01:00
1 2016-10-25T09:46:14.051620+01:00
df['TIMESTAMP'] = [x[:-13] for x in df['TIMESTAMP']]
输出:
TIMESTAMP
0 2016-10-25T09:34:52
1 2016-10-25T09:46:14
顺便说一句,你确定你不需要保留时区信息吗?如果你处理任何类型的日期,我建议始终使用软件包。从Python3.7开始,函数可以直接消化ISO格式,同时可以转换为任何可思考的时间格式。(对于Python3.6或更低版本,请参见答案)
对于使用df['TIMESTAMP']
编写的时间戳的情况:
from datetime import datetime as dt
df['TIMESTAMP'].apply(lambda x: dt.strftime(dt.fromisoformat(x), '%Y-%m-%dT%H:%M:%S'))
将执行此操作并提供所需的输出:
TIMESTAMP
0 2016-10-25T09:34:52
1 2016-10-25T09:46:14
2 2016-10-25T09:51:16
非常感谢。最后一个括号太多了。但我收到了错误:KeyError:'时间戳'。这意味着什么?当你移除最后一个部分时,当DST发挥作用时,你可能会遇到麻烦。这将改变时区,操作后可能会有不一致的数据。您可以考虑,而不是修剪时间戳,纠正它,并将其转换为UTC.thanks的提示!什么是DST?DST代表什么。