【发布时间】:2021-11-27 10:05:07
【问题描述】:
我有一个大数据框 (df),在最后一列中,所有元素都显示为
1055.0000.0
所以最后 2 个字符总是“.0”。最有效的方法是什么?最后一列的名称总是不同的,所以我不知道如何解决这个问题。我试图循环遍历 pandas df 但它占用了太多内存并破坏了代码。有没有办法做类似的事情
df[ 最后一列] = df[ 最后一列 - 最后 2 个字符]
或者创建一个新的 df 然后追加它?
【问题讨论】:
我有一个大数据框 (df),在最后一列中,所有元素都显示为
1055.0000.0
所以最后 2 个字符总是“.0”。最有效的方法是什么?最后一列的名称总是不同的,所以我不知道如何解决这个问题。我试图循环遍历 pandas df 但它占用了太多内存并破坏了代码。有没有办法做类似的事情
df[ 最后一列] = df[ 最后一列 - 最后 2 个字符]
或者创建一个新的 df 然后追加它?
【问题讨论】:
矢量化操作几乎总是更快。 .str 方法允许 pandas 向量化字符串
df["last_col"].str[:-2]
可以在 jupyter notebook 中使用 %%timeit 魔法命令计时。
%%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)
【讨论】: