在 Pandas 上创建变量时出错 - 传递的项目数错误

Posted

技术标签:

【中文标题】在 Pandas 上创建变量时出错 - 传递的项目数错误【英文标题】:Error during creation of variable on Pandas - Wrong number of items passed 【发布时间】:2019-08-09 18:58:42 【问题描述】:

我收到错误消息:ValueError:错误的项目数通过 3,位置暗示 1,我正在努力弄清楚我可以从哪里以及如何开始解决问题。

我不太明白错误的含义;这让我很难排除故障。我还在 Jupyter Notebook 中包含了触发错误的代码块。

根据许多条件,我无法在数据帧上创建变量。

我希望根据条件的答案添加一个带有二进制变量“是”/“否”的列。

我的数据框是由 11 列的 CSV 文件构建的。

我试试这个代码:

import pandas as pd

import numpy as np

df['yes/no'] = np.where(df[(df['var_1'].isin(list)) & (df['var2'] >= '2000-01-01') & (df['var_2'] <= '2000-12-31') & (df['var_3'] >0) & (df['var_4'] =='OK')],'yes','No')

我认为问题来自于变量的创建,因为没有np.where 条件的代码是正确的。

但是当我想创建一个具有这些条件的变量并执行代码时,它会显示错误:

Wrong number of items passed 12, placement implies 1

您知道该错误的含义以及如何解决该错误吗?

谢谢

【问题讨论】:

【参考方案1】:

np.where 返回一个大小仅为它找到的匹配数的数组。如果你想在你的 df 中添加一列,你需要一个相同大小的系列,TrueFalse 取决于条件。为此,只需使用裸条件:

df['yes/no'] = 'No'
rows = (df['var_1'].isin(list)) & 
    (df['var2'] >= '2000-01-01') & 
    (df['var_2'] <= '2000-12-31') & 
    (df['var_3'] >0) & 
     (df['var_4'] =='OK')
df.loc[rows, 'yes/no'] = 'yes'

【讨论】:

非常感谢@josh Friendlander,非常完美

以上是关于在 Pandas 上创建变量时出错 - 传递的项目数错误的主要内容,如果未能解决你的问题,请参考以下文章

在R闪亮中动态创建表时出错

将变量传递给炮兵脚本时出错

在 Visual Studio 上创建新的 python 项目时出错

将同一变量传递到 SQL 语句的多个部分时出错

使用 pip、Windows 7 64 位 Python 3.2 安装 Pandas 时出错

Pandas Pivot Table:按条件过滤时出错