所以我有这样一个df (大约55列,4000行,这里只是一个示例):
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“是一个字符串,它来自:
opc1 = 0:00
opc2 = 0:30
opc3 = 1:00等等,直到:
opc48 = 23:30我的问题是:我怎样才能把所有的列都变成时间格式?当然,我可以一个接一个地做类似的事情(假设该列名为“opc”):
for i in df.iloc[i,1]:
'opc1' == 0:00
'opc2' == 0:30依此类推,但这很令人厌烦。我想要的是:
0 3:30
1 2:00
2 12:30
4 21:30
5 20:30诸如此类
有没有一种更紧凑和精确的方法?
发布于 2021-02-10 02:03:40
您可以使用opc1 1~opc1 48每次创建一个映射obj。
然后将其应用于行df。
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)产出:
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发布于 2021-02-10 01:52:37
将pandas.Timedelta与pandas.Series.str.extract结合使用
t = pd.Timedelta("30m")
df["col"].str.extract("(\d+)", expand=False).astype(int).sub(1) * t输出:
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]https://stackoverflow.com/questions/66129759
复制相似问题