按相同字符动态拆分 pandas 数据框中的列

问题描述 投票:0回答:1

我有大约一堆列需要用冒号(:)分割。有没有一种方法可以做到这一点,而不必指定每个拆分。有时记录有 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

python pandas string dataframe split
1个回答
1
投票

制作要拆分的列的列表,然后将它们循环到

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
© www.soinside.com 2019 - 2024. All rights reserved.