使用 pandas 数据帧生成错误的插入方法插入列

Inserting column with insert method of pandas dataframe generating error

我有以下代码

我正在尝试使用 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'
>>>

能否请您帮忙解决这个错误。

非常感谢任何指点。

insert 方法不return 数据框对象。您可以将数据框对象分配给变量并将插入方法应用于变量:

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]}))

错误原因

DataFrame.insertinplace 操作,它修改原始数据帧和 returns None。在调用第一个 insert 操作后,return 值为 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)

Hacky 解决方案

df.pipe(lambda x: x.insert(0, 'AAA', -1) or x.insert(1, 'BBB', -2) or x)