2016-03-03 38 views
-2

我有一個數據集,看起來像:訪問在大熊貓列在不同的方式

Id Economics  English History Literature 
0 56   1   1   2  1      
1 11   1   0   0  1      
2 6   0   1   1  0      
3 43   2   0   1  1      
4 14   0   1   1  0 

我從文件中讀取一些CSV創造了這個數據集,我可以很容易地訪問列只是用df [」例如,「經濟學」。然後我把它保存到與文件:

df.to_csv(file_path, sep='\t') 

但是,當我重新工作在其他功能的數據集我其他目的,並試圖訪問相同的方式列,即

df=pd.read_csv(file_path, sep='\t') 
print df['Economics'] 

我有

KeyError: Economics

我試過多種編碼,同時閱讀,如果它不是一個多指標的數據幀也驗證了,但一切都與編碼和指數確定。我發現還有另一種方法:df.get('Economocs'),在這種情況下工作沒有錯誤。但是,如果我想重複列名稱,再次尋找「經濟學」,我有一個KeyError。

所以我的問題:爲什麼會發生?爲什麼有時我可以直接使用df ['column_name']訪問列,有時我需要使用df.get('column_name')。以及如何處理column.names,如果第一種方法不起作用?

+0

你可以提供一個自包含的例子證明了什麼問題? – BrenBarn

+0

@BrenBarn,你是什麼意思的獨立的例子?我更新了問題,如果它有助於理解問題 – Amanda

+0

我的意思是提供一段代碼和示例數據,以便其他人可以真正運行該代碼並重現錯誤。任何人都很難幫助你解決問題的描述。您需要一個其他人可以用來複制問題的實際示例。 – BrenBarn

回答

0

它看起來像列名中有一些不需要的字符。 也許是像'經濟學'或其他東西。

df.get('Economics')在這種情況下不會給KeyError,它只會返回任何內容。

嘗試檢查df.columns的輸出以及len(df.columns[1])的列名長度。

+0

沒有尾隨的額外caracteres,我驗證了它 – Amanda

0

我猜你要麼尾隨在所有的空間/你的一些列名的,甚至只有一個列像我下面的測試例如:

測試數據:

Id Economics  English History Literature 
56 1 1 2 1 
11 1 0 0 1 
6 1 1 0 0 
43 2 0 1 1 
14 1 1 1 0 

測試代碼:

import pandas as pd 

df = pd.read_csv('test.csv', sep='\t') 
print(df) 
print(df.columns.tolist()) 

輸出:

Id Economics  English History Literature 
0         56 1 1 2 1 
1         11 1 0 0 1 
2         6 1 1 0 0 
3         43 2 0 1 1 
4         14 1 1 1 0 
['Id Economics  English History Literature '] 

數據框中只有一列:'Id Economics English History Literature '

讓在pd.read_csv()改變sep='\t'sep='\s+',並用同樣的數據集執行我們的測試代碼:

Id Economics English History Literature 
0 56   1  1  2   1 
1 11   1  0  0   1 
2 6   1  1  0   0 
3 43   2  0  1   1 
4 14   1  1  1   0 
['Id', 'Economics', 'English', 'History', 'Literature'] 
+0

不,這不是問題與分隔符,因爲當我打印df.columns我得到了有效的清單所有列 – Amanda

+1

@Amanda,「KeyError」 - 清楚地表明您正嘗試訪問未列的列。所以我不認爲我可以幫助你,直到你發佈'df.columns.tolist()'__after__你最後的'pd.read_csv()'調用的輸出。無論如何,我祝你好運! – MaxU