簡體   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