首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串列转换为小时

将字符串列转换为小时
EN

Stack Overflow用户
提问于 2021-02-10 01:42:43
回答 2查看 28关注 0票数 0

所以我有这样一个df (大约55列,4000行,这里只是一个示例):

代码语言:javascript
复制
0                                 opc18
1                                 opc14
2                                 opc16
3                                 opc15
4                                 opc13
5                                 opc14
6                                 opc16
7                                 opc17
8                                 opc15
9                                 opc15
10                                opc14
11                                opc15
12                                opc15
13                                opc14
14                                opc11
15                                opc17
16                                opc15
17                                opc17
18                                opc16
19                                opc17
20                                opc17

"opcX“是一个字符串,它来自:

代码语言:javascript
复制
opc1 = 0:00
opc2 = 0:30
opc3 = 1:00

等等,直到:

代码语言:javascript
复制
opc48 = 23:30

我的问题是:我怎样才能把所有的列都变成时间格式?当然,我可以一个接一个地做类似的事情(假设该列名为“opc”):

代码语言:javascript
复制
for i in df.iloc[i,1]: 

'opc1' == 0:00
'opc2' == 0:30

依此类推,但这很令人厌烦。我想要的是:

代码语言:javascript
复制
0  3:30
1  2:00
2  12:30
4  21:30
5  20:30

诸如此类

有没有一种更紧凑和精确的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-10 02:03:40

您可以使用opc1 1~opc1 48每次创建一个映射obj

然后将其应用于行df。

代码语言:javascript
复制
obj = pd.Series(pd.date_range('2021-02-10', '2021-02-10 23:59:59', freq='30T'),
               index=('opc' + pd.Series(np.arange(1, 49)).map(str))).dt.strftime('%H:%M')

obj.head()

    opc1    00:00
    opc2    00:30
    opc3    01:00
    opc4    01:30
    opc5    02:00
    dtype: object

df['opc'].map(obj)

产出:

代码语言:javascript
复制
df['Time'] = df['opc'].map(obj)
print(df)

     opc   Time
0   opc18  08:30
1   opc14  06:30
2   opc16  07:30
3   opc15  07:00
4   opc13  06:00
5   opc14  06:30
6   opc16  07:30
7   opc17  08:00
8   opc15  07:00
9   opc15  07:00
10  opc14  06:30
11  opc15  07:00
12  opc15  07:00
13  opc14  06:30
14  opc11  05:00
15  opc17  08:00
16  opc15  07:00
17  opc17  08:00
18  opc16  07:30
19  opc17  08:00
20  opc17  08:00
票数 0
EN

Stack Overflow用户

发布于 2021-02-10 01:52:37

pandas.Timedeltapandas.Series.str.extract结合使用

代码语言:javascript
复制
t = pd.Timedelta("30m")
df["col"].str.extract("(\d+)", expand=False).astype(int).sub(1) * t

输出:

代码语言:javascript
复制
0    0 days 08:30:00
1    0 days 06:30:00
2    0 days 07:30:00
3    0 days 07:00:00
4    0 days 06:00:00
5    0 days 06:30:00
6    0 days 07:30:00
7    0 days 08:00:00
8    0 days 07:00:00
9    0 days 07:00:00
10   0 days 06:30:00
11   0 days 07:00:00
12   0 days 07:00:00
13   0 days 06:30:00
14   0 days 05:00:00
15   0 days 08:00:00
16   0 days 07:00:00
17   0 days 08:00:00
18   0 days 07:30:00
19   0 days 08:00:00
20   0 days 08:00:00
Name: col, dtype: timedelta64[ns]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66129759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档