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

3
我有一个数据集,其中一列有超过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'...'}   

另外我不确定是否重要,但该列是一个对象类型。有人能告诉我我做错了什么,如何解决这个问题吗???

4个回答

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

5

有点晚了(@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

4
你可以使用 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

@Aongoose,当您的声望达到15+时,您可以为许多答案投票,但只能接受一个答案。通过接受我的答案,您取消了对Wen答案的接受。这可能不是您的意图。如果不是,请随时通过单击复选标记再次接受Wen的答案。 - piRSquared
是的,那是我的错,感谢@piRSquared提醒。 - Aongoose

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接