【问题标题】:Data Frame Error: UndefinedVariableError: name is not defined数据帧错误:UndefinedVariableError:名称未定义
【发布时间】:2019-08-16 02:23:14
【问题描述】:

我正在使用 jupyter 笔记本并尝试在列中为两个不同的答案创建对象:是和否;为了查看所有“是”响应和“否”响应之间的相似性。

当我使用以下代码时,我收到一条错误消息:UndefinedVariableError: name 'No' is not defined

df_yes=df.query('No-show == \"Yes\"')
df_no=df.query('No-show == \"No\"')

由于即使我只包含 df_yes 也会发生相同的错误,所以我认为它必须与列名“No-show”有关。所以我尝试了不同的列,果然成功了。

那么有人可以告诉我我在这个代码块上做错了什么,所以我不会再这样做了?谢谢!

【问题讨论】:

  • 您正试图从No 列中减去show 列。我不知道是否有任何方法可以转义包含无效字符的列名;更简单的解决方案是更合理地命名列。

标签: python-3.x csv jupyter-notebook data-analysis


【解决方案1】:

观察这个例子:

>>> import pandas as pd
>>> d = {'col1': ['Yes','No'], 'col2': ['No','No']}
>>> df = pd.DataFrame(data=d)
>>> df.query('col1 == \"Yes\"')
  col1 col2
0  Yes   No
>>> df.query('col2 == \"Yes\"')
Empty DataFrame
Columns: [col1, col2]
Index: []
>>> 

一切似乎都按预期工作。但是,如果我将col1col2 分别更改为col-1col-2

>>> d = {'col-1': ['Yes','No'], 'col-2': ['No','No']}
>>> df = pd.DataFrame(data=d)
>>> df.query('col-1 == \"Yes\"')
...
pandas.core.computation.ops.UndefinedVariableError: name 'col' is not defined

如您所见,问题在于您在列名中使用的减号 (-)。事实上,您更倒霉,因为您的错误消息中的No 指的是No-show,而不是您的列的值No

因此,最好的解决方案(以及一般的最佳实践)是以不同的方式命名列(将它们视为变量;变量名称中不能有减号,至少在 Python 中是这样)。例如,No_show。如果此数据框不是您创建的(例如,您从csv 文件中读取数据),这是rename columns appropriately 的常见做法。

【讨论】:

  • 谢谢!我能够重命名该列,现在它可以工作了!
  • 此外,您不需要转义",因为您的查询字符串在' 中(这是Python 的一个非常方便的功能),即您可以写df.query('col1 == "Yes"') 而不是@ 987654337@.
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多