Pandas中关于rename函数中参数inplace的作用

2,288 阅读2分钟

引言

  • 使用pandas中的DF的某一列使用rename函数(并设置inpalce=True)后使用head函数,报错:
"AttributeError: 'NoneType' object has no attribute 'head'"
  • 在了解该参数的过程中,发现了该参数在pandas的其他函数中甚至于python语言的函数中(目前所用语言中)的效果都有点相似,故整理该文作为复习之用,也可以作为以后举一反三的一种思考缘由。

测试过程如下:(这是在jupyter环境下运行代码)

  • 首先建立一个pandas中的DF,如下图所示
import pandas as pd
import numpy as np
testdf3 = pd.DataFrame(
    {"A": np.arange(5),
     "B": pd.Timestamp("20171129"),
     "C": pd.Series(1, index =np.arange(5), dtype = "float32"),
     "D": np.array([3]*5),
     "E": pd.Categorical(["test", "train", "test", "train","test"]),
     "F": 'foo'})
testdf3
  • 运行结果如下:

image.png

  • 然后验证rename函数中inplace参数的作用
    • 1 首先验证当设置inplace=True的情况,根据结果可以看到显然是对原始DF进行了修改
import pandas as pd
import numpy as np
testdf3 = pd.DataFrame(
    {"A": np.arange(5),
     "B": pd.Timestamp("20171129"),
     "C": pd.Series(1, index =np.arange(5), dtype = "float32"),
     "D": np.array([3]*5),
     "E": pd.Categorical(["test", "train", "test", "train","test"]),
     "F": 'foo'})
testdf3.rename(columns={"E": "test"}, inplace=True)
testdf3

image.png

  • 2 其次验证当设置inplace=True,用新的变量接收的话就会出现新变量为None的情况
import pandas as pd
import numpy as np
testdf3 = pd.DataFrame(
    {"A": np.arange(5),
     "B": pd.Timestamp("20171129"),
     "C": pd.Series(1, index =np.arange(5), dtype = "float32"),
     "D": np.array([3]*5),
     "E": pd.Categorical(["test", "train", "test", "train","test"]),
     "F": 'foo'})
test = testdf3.rename(columns={"E": "test"}, inplace=True)
print(test)

image.png

  • 3 当设置inplace=False(默认),结果用新变量接收的就是修改后的DF
import pandas as pd
import numpy as np
testdf3 = pd.DataFrame(
    {"A": np.arange(5),
     "B": pd.Timestamp("20171129"),
     "C": pd.Series(1, index =np.arange(5), dtype = "float32"),
     "D": np.array([3]*5),
     "E": pd.Categorical(["test", "train", "test", "train","test"]),
     "F": 'foo'})
test = testdf3.rename(columns={"E": "test"})
print(test)

image.png

结论:

inplace参数的理解:

  • 修改一个对象时:

    • inplace=True:不创建新的对象,直接对原始对象进行修改;

    • inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。