所以我有一个超过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
类型。
任何人都可以告诉我我做错了什么以及如何解决问题???
答案 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