我有一个大数据框(df),在最后一列中,所有元素都显示为
1055.0000.0
所以最后两个字符总是"。0"。最有效的方法是什么?最后一个列的名称总是不同的,所以我不知道如何处理这一点。我曾尝试过在pandas上循环,但它占用了太多的内存并破坏了代码。有没有办法做一些像
df[最后一列]= df[最后一列-最后两个字符]
或者创建一个新的df,然后将它附加在?
向量化操作几乎总是更快。.str
方法允许pandas向量化字符串
df["last_col"].str[:-2]
可以在jupyter notebook中使用%%timeit
magic命令来计时。
%%timeit
df.iloc[:, -1].str[-2:]
>>> 352 µs ± 4.68 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df["last_col"].str[:-2]
>>> 242 µs ± 4.76 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
您也可以使用rsplit
:
s = '105.0000.0'
s.rsplit('.0', 1)[0]
输出:
105.0000
尝试使用str
访问器:
df.iloc[:, -1] = df.iloc[:, -1].astype(str).str[-2:].astype(int)