如何删除python数据帧中最后一个下划线后的字符串?

2024-09-25 00:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从数据框中删除最后一个下划线之后的所有字符串。如果我在dataframe中查看我的数据

AA_XX,
AAA_BB_XX,
AA_BB_XYX,
AA_A_B_YXX

我想得到这个结果

AA,
AAA_BB,
AA_BB,
AA_A_B

Tags: 数据字符串dataframeaaxxbbaaaxyx
3条回答
pd.DataFrame({'col': ['AA_XX', 'AAA_BB_XX', 'AA_BB_XYX', 'AA_A_B_YXX']})['col'].apply(lambda r: '_'.join(r.split('_')[:-1]))

解释:

df = pd.DataFrame({'col': ['AA_XX', 'AAA_BB_XX', 'AA_BB_XYX', 'AA_A_B_YXX']})

创造

    col
0   AA_XX
1   AAA_BB_XX
2   AA_BB_XYX
3   AA_A_B_YXX

使用“应用”循环浏览要编辑的列。
我在_处断开字符串,然后连接所有部分,最后一部分在_

df['col'] = df['col'].apply(lambda r: '_'.join(r.split('_')[:-1]))
print(df)

结果:

    col
0   AA
1   AAA_BB
2   AA_BB
3   AA_A_B

如果数据集包含像AA这样的值(不带下划线的值)。
像这样改变lambda

df = pd.DataFrame({'col': ['AA_XX', 'AAA_BB_XX', 'AA_BB_XYX', 'AA_A_B_YXX', 'AA']})
df['col'] = df['col'].apply(lambda r: '_'.join(r.split('_')[:-1]) if len(r.split('_')) > 1 else r)
print(df)

这是另一种方法

import pandas as pd
data = {'s': ['AA_XX', 'AAA_BB_XX', 'AA_BB_XYX', 'AA_A_B_YXX']}
df = pd.DataFrame(data)

def cond1(s):
    temp_s = s.split('_')
    temp_len = len(temp_s)
    if len(temp_s) == 1:
        return temp_s
    else:
        return temp_s[:len(temp_s)-1]
df['result'] = df['s'].apply(cond1)

您只需使用^{}^{}即可完成此操作:

In [2381]: df
Out[2381]: 
         col1
0       AA_XX
1   AAA_BB_XX
2   AA_BB_XYX
3  AA_A_B_YXX

In [2386]: df['col1'] = df['col1'].str.split('_').str[:-1].str.join('_')

In [2387]: df
Out[2387]: 
     col1
0      AA
1  AAA_BB
2   AA_BB
3  AA_A_B

相关问题 更多 >