我想对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]
这项工作但需要时间..很多..谢谢
答案 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倍