繁体   English   中英

Python Pandas:NameError:未定义名称

[英]Python Pandas: NameError: name is not defined

好的,这是我的第一个 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')

这是包含用户代理字符串的输入文件中的标题和第一行数据:

"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)调用中引用列名吗? 如果在调用函数时可能的话,我还想知道如何通过列号引用它。

谢谢

导入pandas包读取数据

import pandas as pd 

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

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

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']df.user_agent_string 我建议在交互式环境中尝试此操作,以便您可以在将结果传递给函数之前查看结果。

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

parsed_types = df.user_agent_string.apply(parseDeviceType)

要按编号而不是名称访问列(我不建议这样做),您可以使用iloc 这使您可以访问所有行( : )和第一科拉姆( 0从数据框对象):

user_agent_string = df.iloc[:, 0]

在这里,您没有导入熊猫

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

当您保存文件并稍后打开时,您将遇到相同的错误,因此您需要重新启动项目并从头开始编译代码...如果您使用 jupyter notebook .. 您可以轻松清除所有错误

尝试从文件名中删除 .txt 可能会有所帮助。 像下面这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM