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

我有以下代码

我正在尝试使用 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]}))

相似文章

随机推荐

最新文章