在python中更改panda.dataframe(快速方式)的值

时间:2015-01-16 08:37:23

标签: python numpy pandas dataframe

我想对pandas.dataframe的特定列执行操作。

由此:

# admit gre gpa rank
# 0 0 1123 3.61 3
# 1 1 4454 3.67 3
# 2 1 8000 4.00 1
# 3 1 6405 3.19 4
# 4 0 5205 2.93 4

我想以这种方式更改gre列:只选择最后两个数字..(例如:df ['gre':0] = 1123 => 23)。 我有一个非常大的数据集,所以,我正在寻找一个简单的方法来做到这一点,而不是通过pandas数据框,我尝试了python for循环:

for i in df.index:
   df.loc[i, 'gre'] = str(df.loc[i, 'gre'])[2:3]

这项工作但需要时间..很多..谢谢

1 个答案:

答案 0 :(得分:2)

如果dtype是数字,那么您可以转换为字符串,然后取最后2个字符:

In [4]:

df['gre'] = df['gre'].astype(str).str[-2:]
df
Out[4]:
   admit gre   gpa  rank
0      0  23  3.61     3
1      1  54  3.67     3
2      1  00  4.00     1
3      1  05  3.19     4
4      0  05  2.93     4

如果它已经是一个字符串,则df['gre'] = df['gre'].str[-2:]可以正常工作。

然后您可以转换回来:

In [7]:

df['gre'] = df['gre'].astype(np.int64)
df.dtypes
Out[7]:
admit      int64
gre        int64
gpa      float64
rank       int64
dtype: object

<强>定时

In [9]:

%%timeit 
for i in df.index:
   df.loc[i, 'gre'] = str(df.loc[i, 'gre'])[2:3]
100 loops, best of 3: 2.98 ms per loop
In [11]:

%timeit df['gre'] = df['gre'].astype(str).str[-2:]

1000 loops, best of 3: 380 µs per loop

我们可以看到使用矢量化str方法快了700倍