Python Pandas DataFrame中删除pjp-至首个|间内容的问题求助
解决DataFrame中特定列的字符串替换问题
首先,咱们来梳理下你代码里的几个问题:
- 你直接对整个DataFrame调用
str.startswith,但这个方法是给**单列(Series)**用的,整个DataFrame没有这个属性,所以会触发"仅适用于字符串"的错误。 - 你的
replace方法没开启正则模式,而且正则表达式写得不对,没法精准匹配pjp-到第一个|的内容。 - 最后
head(df)应该写成df.head(),因为head是DataFrame的内置方法,得通过实例调用。
下面是修正后的代码,专门针对code列做处理:
import pandas as pd # 读取数据(read_csv直接返回DataFrame,不用再转一次) df = pd.read_csv("test.csv", delimiter=",") # 对code列执行正则替换:匹配从pjp-开始到第一个|的所有内容,替换为空 df['code'] = df['code'].str.replace(r'pjp-.*?\|', '', regex=True) # 查看处理后的结果 print(df) print(df.head())
代码细节解释:
df['code'].str.replace(...):只针对code这一列调用字符串方法,确保操作的是字符串类型的数据,从根源避免类型错误。- 正则表达式
r'pjp-.*?\|':pjp-:精准匹配开头的固定标识.*?:非贪婪匹配任意字符(这样只会匹配到第一个|就停止,不会误删后面的内容)\|:转义|,因为它在正则里是特殊字符,必须用反斜杠转义才能匹配实际的竖线
regex=True:告诉pandas这是正则表达式替换,不是普通的字符串匹配替换
最终效果:
运行后你的DataFrame会完全符合期望输出:
Quantity code boxes
34 3cex 10
20 4cex 8
12 5cex 6
40 6cex 14
额外提个小细节:如果code列里有部分行不满足pjp-开头的格式,这个代码也不会出错,只会替换符合模式的内容,不影响其他行。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

