首页 > 解决方案 > 删除熊猫中单词的左括号和右括号

问题描述

给定一个数据框:

df = 

                         multi
0 MULTIPOLYGON(((3 11, 2 33)))
1 MULTIPOLYGON(((4 22, 5 66)))

我试图删除单词'MULTIPOLYGON'和括号 ' ((( ', ' ))) '


我的尝试:

df['multi'] = df['multi'].str.replace(r"\(.*\)","")
df['multi'] = df['multi'].map(lambda x: x.lstrip('MULTIPOLYGON()').rstrip('aAbBcC'))

df.values = 

array([[''],
       [''],
       ...
       [''],
       [''],
       [''],
       ['7.5857754821 44.9628409423']

期望的输出:

df = 

     multi
3 11, 2 33
 4 22, 5 6

标签: pythonpandasnumpy

解决方案


您可以通过以下方式使用 df.column.str。

df['a'] = df['a'].str.findall(r'[0-9.]+')
df = pd.DataFrame(df['a'].tolist())
print(df)

输出:

     0     1
0  3.49  11.10
1  4.49  22.12

这适用于任意数量的列。但最后你必须命名这些列。

df.columns = ['a'+str(i) for i in range(df.shape[1])]

即使某些行具有不同数量的数值,此方法也将起作用。喜欢

df =pd.DataFrame({'a':['MULTIPOLYGON(((3.49)))' ,'MULTIPOLYGON(((4.49 22.12)))']})

     a
 0  MULTIPOLYGON(((3.49)))
 1  MULTIPOLYGON(((4.49 22.12)))

所以预期的输出是

      0     1
0   3.49    None
1   4.49    22.12

使用命名列后,

df.columns = ['a'+str(i) for i in range(df.shape[1])]

你得到,

      a0    a1
0   3.49    None
1   4.49    22.12

推荐阅读