如果有2或3个空格,如何从pandas列中删除它们

1 投票
1 回答
33 浏览
提问于 2025-04-13 13:04

我有:

pd.DataFrame({'id':[1,2],'col1':['a b c','a b c d']})

我想要:

pd.DataFrame({'id':[1,1,2],'col1':['ab c', 'a bc','ab cd']})
  • 每一列里总是有1、2或3个空格
  • 如果有2个空格(也就是3个单词),我想复制这一行,并把值改成在一行显示 word1word2 word3,在第二行显示 word1 word2word3
  • 如果有3个单词(也就是4个空格),我想把值改成 word1word2 word3word4

我大约有30列,并且用下面的代码来测试空格的数量:

df['name_cnt'] = df['name'].str.count('\s+')

1 个回答

1
  1. 定义一个函数,根据每个值的长度来处理它,并将这个函数应用到列 name 上。
  2. 如果这个值有3个单词,函数会返回一个列表,之后需要把这个列表拆分成更多的行。
def process_col(col):
    w = col.split()
    if len(w) == 3:
        return [f"{w[0]}{w[1]} {w[2]}", f"{w[0]} {w[1]}{w[2]}"]
    elif len(w) == 4:
        return f"{w[0]}{w[1]} {w[2]}{w[3]}"
    else:
        return col


df["name"] = df["name"].apply(process_col)
df = df.explode("name").reset_index(drop=True)

假设这个数据表是输入:

   id     name
0   1    a b c
1   2  a b c d

结果将会是:

   id   name
0   1   ab c
1   1   a bc
2   2  ab cd

撰写回答