更快行条目的更快方法?

时间:2017-08-20 13:31:57

标签: pandas python-3.5

我有一个pandas数据帧如下:

In [55]: df.head()
Out[55]: 
          Country  Energy Supply  Energy Supply per Capita  % Renewable
0     Afghanistan   3.210000e+08                      10.0    78.669280
1         Albania   1.020000e+08                      35.0   100.000000
2         Algeria1   1.959000e+09                      51.0     0.551010
3  American Samoa            NaN                       NaN     0.641026
4         Andorra   9.000000e+06                     121.0    88.695650

并假设我要删除df['Country']中每个条目的每个数字字符 我写了以下代码:

In [15]: for c in energy['Country']:
   ....:     c = ''.join([i for i in c if not i.isdigit()])
   ....:     

当我打电话给df.head()时,输出相同,即根本没有变化。据我所知,这种方法只是为变量c赋值,但是没有对数据帧进行更改(我是否正确?)

所以我尝试了新代码:

In [51]: k = 0

In [52]: for c in df['Country']:
   ....:     df.loc[k, "Country"] = ''.join([i for i in c if not i.isdigit()])
   ....:     k += 1
   ....:     

并且它有效。 我当然知道这是一个非常慢的方法(第二个),有没有更快的方法可用?

2 个答案:

答案 0 :(得分:1)

您可以使用Pandas内置字符串操作str.replace()

df['Country'] = df['Country'].str.replace('\d','')

答案 1 :(得分:0)

使用map功能。使用Python模块re可以轻松完成此任务。

import re
df['Country'] = df['Country'].map(lambda x: re.sub('\d', '', x))