首页 > 解决方案 > 从其他两列在 Pandas 数据框中创建新列时出错

问题描述

我有以下(玩具)数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Manufacturer':['Allen Edmonds', 'Louis Vuitton 23', 'Louis Vuitton 8', 'Gulfstream', 'Bombardier', '23 - Louis Vuitton', 'Louis Vuitton 20'],
                   'System':['None', 'None', '14 Platinum', 'Gold', 'None', 'Platinum 905', 'None']
                  })

接下来,我创建一个Manufacturer基于两个现有列命名的列:

df.loc[(df['Manufacturer'].str.contains('Louis')) & 
       (df['System'].str.contains('Platinum')),
      'Pricing'] = 'East Coast'

在玩具数据集上,这种方法按预期工作。但是,在生产数据(很遗憾,我无法共享)上,我看到以下错误消息:

KeyError:  "None of [Float64Index([nan, nan, nan, nan, nan, nan...], \n       dtype='float64', length=583)] are in the [index]"

起初,我认为错误可能是由列标题中的空格引起的。但是,看起来情况并非如此。

列标题分配如下:

for elem in elements:
    d = {
        'Manufacturer' : issue.fields.manufacturer,
        'System' : issue.fields.system
        }

(数据来自数据库)

知道什么可能导致此关键错误吗?

也许我需要使用以下改编:

df['Pricing'] = np.where(df['Manufacturer'].str.contains('Louis'), 'East Coast', 'None')

但是,我不确定如何使用np.where两个条件...(请参阅如何根据我的原始问题的一个或多个 OTHER 列的条件子字符串搜索在 Pandas 数据框中创建列)。

提前致谢!

标签: pythonpandasnumpy

解决方案


没有数据就很难理解错误。

您可以通过以下方式在 2 个条件下尝试 np.where:

df['Pricing']=np.where((df['Manufacturer'].str.contains('Louis') & df['System'].str.contains('Platinum')), 'East Coast', None)

推荐阅读