引言
- 使用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
- 运行结果如下:
- 然后验证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
- 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)
- 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)
结论:
inplace参数的理解:
-
修改一个对象时:
-
inplace=True:不创建新的对象,直接对原始对象进行修改;
-
inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。
-