如何在Python中移除DataFrame每行Rule列末尾的逗号?
问题描述
我有如下DataFrame:
执行以下代码后,Rule列内容末尾出现多余逗号,需要移除:
df['Rule'] = df.State.apply(lambda x: str("'"+str(x)+"',")) df['Rule'] = df.groupby(['Description'])['Rule'].transform(lambda x: ' '.join(x)) df1 = df.drop_duplicates('Description',keep = 'first') df1['Rule'] = df1['Rule'].apply(lambda x: str("("+str(x)+")"))
尝试过使用iloc[-1].replace(",","")但未生效,请问该如何解决?
解决方法
有几种实用方式可以去除末尾的逗号:
方法1:从源头避免生成末尾逗号
直接在分组拼接时处理格式,不要给每个State都加逗号,从根源杜绝多余逗号:
# 按Description分组,将State用', '拼接后统一套入括号格式 df['Rule'] = df.groupby('Description')['State'].transform( lambda x: "('" + "', '".join(x.astype(str)) + "')" ) df1 = df.drop_duplicates('Description', keep='first')
这种写法效率最高,全程不会产生多余的末尾逗号。
方法2:对已生成的Rule列做字符串修正
如果已经得到了带末尾逗号的Rule列,可以用正则匹配去除括号前的多余逗号:
# 匹配括号前的逗号(含可能的空格)并替换 df1['Rule'] = df1['Rule'].str.replace(r',\s*\)', ')', regex=True)
如果是在加括号之前处理,可以用rstrip直接去掉字符串末尾的逗号:
df1['Rule'] = df1['Rule'].str.rstrip(',').apply(lambda x: f'({x})')
关于iloc[-1].replace无效的原因
iloc[-1].replace(",","")仅修改单行的临时数据,若没有将修改结果赋值回原DataFrame,不会保存变更。如果要针对单行修改,需要写成:
df1.loc[df1.index[-1], 'Rule'] = df1.loc[df1.index[-1], 'Rule'].replace(',', '')
但这种方法只能处理最后一行,不具备通用性。
内容的提问来源于stack exchange,提问作者user19856161
相关产品推荐
相关产品推荐

