我有一个以这种格式保存在pandas中的时间字符串列表:
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
你知道我应该使用哪个参数吗?
答案 0 :(得分:0)
使用最后一个元素上的矢量化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