Python Pandas:NameError:未定义名称

时间:2015-02-16 03:47:01

标签: python pandas

好的,这是我的第一个Python Pandas程序,我很难弄清楚列名是什么,所以我可以在函数调用中引用它。

以下是我的代码。 parseDeviceType正在调用一个解析useragentstring的函数。但是当我使用我认为的列名称来调用它时,我得到一个名称未定义的错误:

df = pd.read_csv('user_agent_strings.txt',index_col=None, na_values=['NA'],sep=',')
dt=parseDeviceType(user_agent_string)
print df.columns

NameError: name 'user_agent_string' is not defined
Index([u'user_agent_string'], dtype='object')

这里是包含useragentstrings的输入文件中的标题和第一行数据:

"user_agent_string"
"Mozilla/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53"

您能否帮助我了解如何在dt=parseDeviceType(user_agent_string)电话中引用列名?如果可以通过调用函数,我也想知道如何通过列号引用它。

由于

4 个答案:

答案 0 :(得分:1)

您需要了解的第一件事是看到的错误消息:

NameError是Python异常,在这种情况下与Pandas无关。通过尝试使用解释器不知道的任何名称,您可能会得到完全相同的错误:

>>> b = a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

重要的是要知道很少有Python命令会“神奇地”创建名称。要创建名称,几乎总是需要分配(name = ...)。因此,一般来说,如果您尚未执行此操作,则name将不存在。在您的代码中,您创建的名称为df,因此您将需要通过该名称来获取数据。

您可以使用两种不同的方法来访问数据框中的数据,这些方法等效:df['user_agent_string']df.user_agent_string。我建议您在交互式环境中进行尝试,以便在将结果传递给函数之前可以看到结果。

我还要猜测您的函数parseDeviceType仅对一个字符串(基于注释)执行此操作,但是您想在文件中的每个项目上调用此函数。为此,您需要apply

parsed_types = df.user_agent_string.apply(parseDeviceType)

要按数字而不是名称访问列(我不建议这样做),可以使用iloc。这使您可以访问数据框对象中的所有行(:)和第一个列(0):

user_agent_string = df.iloc[:, 0]

答案 1 :(得分:0)

在这里,您没有导入熊猫

import pandas as pd
pd = pd.read_csv('anythinf.csv')

保存文件并在此后稍后打开时,会出现相同的错误,因此如果您使用jupyter Notebook,则需要重新启动项目并从头开始编译代码。 您可以轻松清除所有错误

答案 2 :(得分:-1)

尝试从文件名中删除.txt可能有所帮助。 如下所示:

df = pd.read_csv('user_agent_strings', index_col=None, na_values=['NA'],sep=',')

答案 3 :(得分:-1)

导入pandas包以读取数据

import pandas as pd 

df = pd.read_csv('user_agent_strings', index_col=None, na_values=['NA'],sep=',')