[英]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.