如何在 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 连接两个数据框中的不同列(并附加相似的列)