[英]Pandas - datetime format of milliseconds
我有以这种格式保存在熊猫中的时间字符串列表:
2743 2015-11-30-20-24-0-970
2744 2015-11-30-20-24-0-989
2745 2015-11-30-20-24-1-7
2746 2015-11-30-20-24-1-28
我需要将其转换为日期时间格式,但是当我这样做时:
pd.to_datetime(something['Date'],format="%Y-%m-%d-%H-%M-%S-%f")
我以这种格式获取数据:
2743 2015-11-30 20:24:00.970
2744 2015-11-30 20:24:00.989
2745 2015-11-30 20:24:01.700
2746 2015-11-30 20:24:01.280
但是最后两个的时间格式错误。 应该是这样的:
2745 2015-11-30 20:24:01.007
2746 2015-11-30 20:24:01.028
您知道我应该使用哪个参数吗?
在最后一个元素上使用矢量化的str.zfill
填充零,您可以获得正确的结果:
In [52]:
import io
import pandas as pd
t="""2743 2015-11-30-20-24-0-970
2744 2015-11-30-20-24-0-989
2745 2015-11-30-20-24-1-7
2746 2015-11-30-20-24-1-28"""
df = pd.read_csv(io.StringIO(t), header=None, delim_whitespace=True, names=['id', 'date'])
df
Out[52]:
id date
0 2743 2015-11-30-20-24-0-970
1 2744 2015-11-30-20-24-0-989
2 2745 2015-11-30-20-24-1-7
3 2746 2015-11-30-20-24-1-28
In [53]:
df['date'] = df['date'].str.rsplit('-',n=1).str[0] + '-' + df['date'].str.rsplit('-',n=1).str[-1].str.zfill(3)
df
Out[53]:
id date
0 2743 2015-11-30-20-24-0-970
1 2744 2015-11-30-20-24-0-989
2 2745 2015-11-30-20-24-1-007
3 2746 2015-11-30-20-24-1-028
In [54]:
pd.to_datetime(df['date'],format="%Y-%m-%d-%H-%M-%S-%f")
Out[54]:
0 2015-11-30 20:24:00.970
1 2015-11-30 20:24:00.989
2 2015-11-30 20:24:01.007
3 2015-11-30 20:24:01.028
Name: date, dtype: datetime64[ns]
所以关键是这一行:
df['date'].str.rsplit('-',n=1).str[0] + '-' + df['date'].str.rsplit('-',n=1).str[-1].str.zfill(3)
这将调用rsplit
并获取最后一个元素,然后在这些元素上调用zfill
,然后再将其与字符串的其余部分重新连接起来以获取所需的内容。
In [57]:
df['date'].str.rsplit('-',n=1).str[-1].str.zfill(3)
Out[57]:
0 970
1 989
2 007
3 028
dtype: object
In [58]:
df['date'].str.rsplit('-',n=1).str[0] + '-' + df['date'].str.rsplit('-',n=1).str[-1].str.zfill(3)
Out[58]:
0 2015-11-30-20-24-0-970
1 2015-11-30-20-24-0-989
2 2015-11-30-20-24-1-007
3 2015-11-30-20-24-1-028
dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.