Pandas删除字符后的列中的所有字符串

时间:2018-04-13 15:17:47

标签: python pandas object replace

所以我有一个超过500行的数据集,其中一列的值如下:

DF:

         column1

 0    a{'...'}  
 1    b{'...'}
 2    c{'...'}  
 3    d{'...'}  

我想删除{}内的所有内容。

我一直在看这个问题,Pandas delete parts of string after specified character inside a dataframe并在那里尝试了解决方案,但我一直收到错误(我知道StringIO现在是io.StringIO)。

我试过

df.column1 = df.column1.str.split('{')[0]

但是收到错误消息:KeyError: 0并且真的不明白这意味着什么

我也试过了:

df.column1 = df.column1.str.split(pat='{')

但这似乎只删除了'{'所以我留下了

      column1

 0    a'...'}   
 1    b'...'}
 2    c'...'}   
 3    d'...'}   

此外,我不确定它是否重要,但列是object类型。 任何人都可以告诉我我做错了什么以及如何解决问题???

4 个答案:

答案 0 :(得分:5)

您可以使用replace

df['column1'].str.replace(r"\{.*\}","")
Out[385]: 
0    a
1    b
2    c
3    d
Name: column1, dtype: object

答案 1 :(得分:3)

您还可以使用pandas.DataFrame.replace并传递一个字典,指定对各列进行的操作。

使用@ Wen的正则表达式

df.replace(dict(column1={'\{.*\}': ''}), regex=True)

  column1
0       a
1       b
2       c
3       d

本着@pault的精神,你也可以使用pandas.Series.str.extract

df.column1.str.extract('([^\{]+)', expand=False)

  column1
0       a
1       b
2       c
3       d

答案 2 :(得分:2)

有点晚了(@ Wen的解决方案很棒),但可以使用pandas.Series.str.split(),就像你原来的尝试一样。你很亲密 - 你只需要设置expand=True

df["column1"] = df["column1"].str.split("{", expand=True)[0]
#  column1
#0       a
#1       b
#2       c
#3       d

答案 3 :(得分:0)

使用.apply

df = pd.DataFrame({"a":["a{'...'}", "b{'...'}"]})
df["a"] = df["a"].apply(lambda x: x.split('{')[0])
print df