Python Pandas: 名称错误:名称未定义

4

好的,这是我的第一个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)调用中引用列名吗?如果在函数调用中可以通过列号引用它,我也想知道如何引用。

谢谢


1
user_agent_string 应该是一个字符串吗?例如:dt=parseDeviceType('user_agent_string') - 101
嗨:我正在尝试传递一个列名。把user_agent_string放在引号中不是意味着我正在传递一个文字而不是一个变量吗? - Jazzmine
1
@Jazzmine 尝试使用df.user_agent_string。 - Liam Foley
您的代码中似乎不存在该变量 ;) - 101
由于您没有展示 parseDeviceType 的代码,我猜测您正在尝试传递一个变量名而不是从 df 中选择列的字符串。您是否尝试过像 figs 建议的那样,在 user_agent_string 周围加上引号? - EdChum
抱歉,figs。我猜这就是我对pandas的欢迎了。将变量名用单引号括起来传递可以正常工作。但它只处理了一行,我需要一个for循环来遍历整个数据框吗?谢谢。 - Jazzmine
4个回答

2

导入 pandas 包以读取数据

import pandas as pd 

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

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]

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

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

2
请您能否提供一些解释,说明为什么这是正确的? - bcdan

-2

在这里,你没有导入pandas库

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

当你保存文件并在以后打开时,你会得到同样的错误,所以你需要重新启动项目并从头编译代码...如果你使用jupyter笔记本,你可以轻松地消除所有错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接