我有大约一堆列需要用冒号(:)分割。有没有一种方法可以做到这一点,而不必指定每个拆分。有时记录有 2 个冒号,有时有 3 个冒号。
示例数据:
DATE TALK_TIME CONSULT_TIME
0 2023-11-21 NaN 05:10
1 2023-11-21 00:04:16 NaN
2 2023-11-21 NaN NaN
3 2023-11-21 00:24:30 NaN
4 2023-11-21 00:04:08 NaN
我的代码:
# doing this for every column that needs to be split.. very meticulous
df[['TALK_TIME1', 'TALK_TIME2', 'TALK_TIME3']] = df['TALK_TIME'].str.split(':', expand=True)
df[['CONSULT_TIME1', 'CONSULT_TIME2']] = df['CONSULT_TIME'].str.split(':', expand=True)
我想要的输出
DATE TALK_TIME1 TALK_TIME2 TALK_TIME3 CONSULT_TIME1 CONSULT_TIME2
0 2023-11-21 NaN NaN NaN 05 10
1 2023-11-21 00 04 16 NaN NaN
2 2023-11-21 NaN NaN NaN NaN NaN
3 2023-11-21 00 24 30 NaN NaN
4 2023-11-21 00 04 08 NaN NaN
split
和 rename
,最后 concat
所有这些输出与非目标列一起:
cols = ['TALK_TIME', 'CONSULT_TIME']
lst = [df[col].str.split(':', expand=True)
.rename(columns=lambda x: f'{col}_{x+1}')
for col in cols
]
out = pd.concat([df.drop(columns=cols)]+lst, axis=1)
输出:
DATE TALK_TIME_1 TALK_TIME_2 TALK_TIME_3 CONSULT_TIME_1 CONSULT_TIME_2
0 2023-11-21 NaN NaN NaN 05 10
1 2023-11-21 00 04 16 NaN NaN
2 2023-11-21 NaN NaN NaN NaN NaN
3 2023-11-21 00 24 30 NaN NaN
4 2023-11-21 00 04 08 NaN NaN