使用inplace=True重命名数据帧列有任何问题吗



关于在处理数据帧时使用inplace=True的缺点,已经写了很多文章,但我是否错误地认为用inplace=True重命名列是良性的?当我进行时,是否有任何数据块被复制和丢弃

df.rename(columns={'old': 'new'}, inplace=True)

简单的计时测试表明,在适当的位置重命名列比分配副本更快:

df = df.rename(columns={'old': 'new'})

实际上对于大数据帧要快得多。进行重命名的时间并不取决于数据帧的大小。

import numpy as np
import pandas as pd
import time
# np.random.seed(0)
df = pd.DataFrame(np.random.rand(10**6,5), columns=list('abcde'))
d1 = dict(zip(list('abcde'),list('ABCDE')))
d2 = dict(zip(list('ABCDE'),list('abcde')))
t0 = time.perf_counter()
for i in range(10):
df.rename(columns=d1, inplace=True)
df.rename(columns=d2, inplace=True)
t1 = time.perf_counter()
for i in range(10):
df = df.rename(columns=d1)
df = df.rename(columns=d2)
t2 = time.perf_counter()
print('inplace :  ', t1-t0)
print('df = df :  ', t2-t1)

我使用的是Python 3.9.6和Pandas 1.3.1。在Win10下获得:

inplace :   0.003490000000000215
df = df :   0.1703701999999998

我是否可以得出这样的结论:没有在幕后复制?

进行重命名的时间不取决于数据帧的大小。我是否可以得出这样的结论:没有在幕后复制?

是的,您可以得出结论,除了可以制作列名系列的副本。显然,这方面的性能应该无关紧要,因为列的数量通常不多。

相关内容

最新更新