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

Change values of panda.dataframe (fast way) in python

我想对 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 列:Select 只是最后两个数字..(例如:df['gre':0] = 1123 => 23)。 我有一个非常大的数据集,所以我正在寻找一种没有 运行 通过 pandas 数据框的简单方法,我尝试了 python for 循环:

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

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

如果 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 多倍