在pandas库中很多次都有一个选项来更改对象,例如使用以下语句...
df.dropna(axis='index', how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)
我很好奇返回的内容以及inplace=True传递对象时的处理方式inplace=False.
正在修改的所有操作self时inplace=True?什么时候inplace=False立即创建一个新对象new_df = self,然后new_df返回?
我已将此报告为大熊猫问题.与此同时,我发布此处希望节省其他时间,以防他们遇到类似的问题.
在分析需要优化的进程时,我发现重命名列不在适当位置可以提高x120的性能(执行时间).分析表明这与垃圾收集有关(见下文).
此外,通过避免使用dropna方法来恢复预期的性能.
以下简短示例演示了因子x12:
import pandas as pd
import numpy as np
Run Code Online (Sandbox Code Playgroud)
%%timeit
np.random.seed(0)
r,c = (7,3)
t = np.random.rand(r)
df1 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)
indx = np.random.choice(range(r),r/3, replace=False)
t[indx] = np.random.rand(len(indx))
df2 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)
df = (df1-df2).dropna()
## inplace rename:
df.rename(columns={col:'d{}'.format(col) for col in df.columns}, inplace=True)
Run Code Online (Sandbox Code Playgroud)
100个循环,最佳3:每循环15.6毫秒
第一输出线%%prun:
ncalls tottime percall cumtime percall filename:lineno(function)
Run Code Online (Sandbox Code Playgroud)1 0.018 0.018 0.018 0.018 {gc.collect}
%%timeit
np.random.seed(0)
r,c = (7,3)
t = np.random.rand(r)
df1 = pd.DataFrame(np.random.rand(r,c), …Run Code Online (Sandbox Code Playgroud) 我尝试在数据帧中删除列'Age'的空值,它由浮点值组成,但它不起作用.我试过了
data.dropna(subset=['Age'], how='all')
data['Age'] = data['Age'].dropna()
data=data.dropna(axis=1,how='all')
Run Code Online (Sandbox Code Playgroud)
它适用于其他列但不适用于'Age'
Pclass Fare Age Sex
0 3 7.2500 22.0 1
1 1 71.2833 38.0 0
2 3 7.9250 26.0 0
3 1 53.1000 35.0 0
4 3 8.0500 35.0 1
5 3 8.4583 NaN 1
6 1 51.8625 54.0 1
7 3 21.0750 2.0 1
Run Code Online (Sandbox Code Playgroud)