如何在 pandas 数据框中解连接或取消连接字符串值?

Posted

技术标签:

【中文标题】如何在 pandas 数据框中解连接或取消连接字符串值?【英文标题】:How do I deconcatenate or unconcatenate a string value in a pandas dataframe? 【发布时间】:2021-01-22 13:41:29 【问题描述】:

我是 python 新手,想了解如何使用数据帧

我有一个数据框-

 desc13month
Out[45]: 
                                            OutputValues  CntOutputValues
0                                  12-99-Annual (AE)                  217
1             21-581-Ineligible  Services(IPS)                        210
2      125-99-Annual (AE),126-22-Jermaine (JE)                        196
3                                  22-99-Annual (AE)                  181
4                                  21-50-Prime (PE)                  169

我希望 OutputValues 列未连接。如果您注意到,例如“Annual”的最后一个字符串取决于第二个字符串 99。如果它是 22,它会更改为 Jermaine。有时可能会有多个,就像我们在第 2 行看到的那样。我的最终输出应该指示这些列和一个附加具有最后一个字符串的列

插图-

desc13month
Out[45]: 
                                            OutputValues  CntOutputValues   final
0                                  12-99-Annual (AE)                  217   Annual (AE)
1             21-581-Ineligible  Services(IPS)                        210   Ineligible  Services(IPS) 
2      125-99-Annual (AE),126-22-Jermaine (JE)                        196   Annual (AE),Jermaine (JE) 
3                                  22-99-Annual (AE)                  181   Annual (AE)
4                                  21-50-Prime (PE)                   169   Prime (PE)

【问题讨论】:

【参考方案1】:

IIUC,我们试试Series.str.replace

df['final'] = df['OutputValues'].str.replace(r'\d+-\d+-', '')

                              OutputValues  CntOutputValues                      final
0                        12-99-Annual (AE)              217                Annual (AE)
1         21-581-Ineligible  Services(IPS)              210  Ineligible  Services(IPS)
2  125-99-Annual (AE),126-22-Jermaine (JE)              196  Annual (AE),Jermaine (JE)
3                        22-99-Annual (AE)              181                Annual (AE)
4                         21-50-Prime (PE)              169                 Prime (PE)

【讨论】:

【参考方案2】:

您的问题有两个部分,一个是处理字符串,另一个是将其应用于数据框。 对于处理字符串,如果模式保持不变意味着您确定每个字符串都是数字-数字-字符并且多个值用“,”分隔,那么您可以使用类似以下函数:

def deconcat(output_value):
    output_value = output_value.split(',')
    result = ''
    for part in output_value:
        _, _, item = part.split('-')
        result += item + ", "
    return result.rstrip(', ')

该函数接受一个字符串,如果有多个值,则用','分割它,然后对于每个值,用'-'分割,并将第三部分添加到结果字符串中。

现在您只需将此函数应用于整个数据框并创建新列:

df['final'] = df.OutputValues.apply(deconcat)

这会将函数应用于数据框中的每一行 OutputValues,并将生成的字符串添加到名为“final”的新列中。

【讨论】:

以上是关于如何在 pandas 数据框中解连接或取消连接字符串值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据框中旋转包含字符串的一列? [重复]

在 Pandas 中取消聚合字符串值字段 [重复]

使用 pandas 连接两个数据框中的不同列(并附加相似的列)

如何将多个列值连接到 Pandas 数据框中的单个列中

如何在 PyCharm 的 pandas 数据框中从 BigQuery 读取数据

python pandas用数字替换数据框中的字符串