我有以下代码
我正在尝试使用 insert
方法将新列插入为特定位置。下面是我的代码,
import pandas as pd
(pd.DataFrame({'product name': ['laptop', 'printer', 'printer',], 'price': [1200, 150, 1200], 'price1': [1200, 150, 1200]})
.insert(0, 'AAA', -1)
.insert(1, 'BBB', -2)
)
有了这个我得到以下错误,
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'insert'
>>>
您能否帮助解决此错误。
任何指针都受到高度赞赏。
回答1
错误原因
DataFrame.insert
是修改原始数据帧并返回 None
的就地操作。在调用第一个 insert
操作后,返回 value 是 None
,因此下一个 insert
会抛出一个错误,抱怨 'NoneType' object has no attribute 'insert'
。
解决方案
df = pd.DataFrame({'product name': ['laptop', 'printer', 'printer',], 'price': [1200, 150, 1200], 'price1': [1200, 150, 1200]})
df.insert(0, 'AAA', -1)
df.insert(1, 'BBB', -2)
哈克解决方案
df.pipe(lambda x: x.insert(0, 'AAA', -1) or x.insert(1, 'BBB', -2) or x)
回答2
insert 方法不返回数据框对象。您可以将数据框对象分配给变量并将插入方法应用于变量:
df = pd.DataFrame({'product name': ['laptop', 'printer', 'printer',],
'price': [1200, 150, 1200],
'price1': [1200, 150, 1200]})
df.insert(0, 'AAA', -1)
df.insert(1, 'BBB', -2)
您也可以使用 join 将其包含在链中,但您必须知道行数:
pd.DataFrame({'AAA': [-1] * 3})\
.join(pd.DataFrame({'BBB': [-2] * 3}))\
.join(pd.DataFrame({'product name': ['laptop', 'printer', 'printer', ],
'price': [1200, 150, 1200],
'price1': [1200, 150, 1200]}))