2017-02-27 92 views
0

你好,我一直在努力解決這個問題解析製表符分隔值,我想遍歷行,並從中選擇數據,然後將其分配給變量。這是我第一次使用熊貓,我不知道如何選擇數據從文本文件變量

reader = pd.read_csv(file_path, sep="\t" ,lineterminator='\r', usecols=[0,1,2,9,10],) 

for row in reader: 
    print(row) 
    #id_number = row[0] 
    #name = row[2] 
    #ip_address = row[1] 
    #latitude = row[9] 

,這是該行的輸出,我想分配給變量:

050000 

129.240.228.138 

planetlab2.simula.no 

59.93 

編輯:也許這對大熊貓來說不是問題,但對於一般的Python來說這不是問題。我對python相當陌生,我試圖實現的目標是逐行解析製表符分隔的文件,並將數據分配給變量並在一個循環中打印出來。

這是輸入文件樣本:

050263 128.2.211.113 planetlab-1.cmcl.cs.cmu.edu NA US Allegheny County Pittsburgh http://www.cs.cmu.edu/ Carnegie Mellon University 40.4446 -79.9427 unknown 
050264 128.2.211.115 planetlab-3.cmcl.cs.cmu.edu NA US Allegheny County Pittsburgh http://www.cs.cmu.edu/ Carnegie Mellon University 40.4446 -79.9427 unknown 
+1

你是什麼意思分配給變量?個別數據點或整列?爲什麼呢?每個都包含在一個數據框中,可以用'.loc','.ix'或'[]'引用。 – Parfait

+0

我的意思是在輸入文件中,數據在每一行上都是製表符分隔的(id \ taddress \ tname \ tlatitude等)。我想逐行迭代並將數據分配給變量 –

+0

*閱讀器*的外觀如何?你期望的輸出是什麼?由於熊貓可以閱讀製表符分隔的文件,因此不甚理解。列不是行分配。 – Parfait

回答

0

的你所描述的一般工作流程是:你想讀取一個csv,在文件中找到一行某個ID,並將該行中的所有值解壓縮爲變量。這對於熊貓來說很簡單。

它看起來像CSV文件中有至少10列。提供usecols arg應該過濾掉你不感興趣的列,並且當加載到pandas DataFrame對象(你稱之爲reader)時,read_csv將忽略它們。

步驟做你想要什麼:

  1. 閱讀使用pd.read_csv()數據文件。你已經這樣做了,但我建議調用這個變量df而不是reader,因爲read_csv返回一個DataFrame對象,而不是Reader對象。您還會發現使用read_csv的names參數將列名分配給數據框很方便。它看起來像你想要names=['id', 'ip_address', 'name', 'latitude','longitude']將這些列作爲列。 (假設col10是經度,這是有道理的,9,10將經/緯對)
  2. 查詢與該ID是你感興趣的行數據幀的對象。有多種方法可以做到這一點。一個是using the query syntax。很難知道爲什麼你想要這個特定的行沒有更多的細節,但你可以在熊貓中查找更多關於索引查找的信息。例如:row = df.query("id == 50000")
  3. 鑑於單行,要行值提取到的變量。如果您已將列名分配給您的數據框,這很容易。您可以將該行視爲值的字典。例如。 lat = row['lat']lon = row['long]
+0

您好,非常感謝您的回答,只是想補充一點,我的輸入文件中沒有標題,所以我想通過所有標籤分隔的行(每行包含我想要的所有數據)並將它們解析爲變量,所以我可以將變量添加到地圖對象中,該地圖對象在循環的每次迭代中都表示一個地理地圖。所以基本上:1.讀取線,2.解析數據,3.打印值..然後再次相同 –

+0

@FrantisekFaraks - 你看到發生了什麼?你缺乏總問題的信息被誤解了,這個答案對你不起作用。請向我們展示您的輸入文件和所需的輸出,以獲得可再現的示例和更大的上下文(XY問題的X不是Y)。 – Parfait

0

您可以使用iterrows()

df = pandas.read_csv(file_path, sep=',') 
for index, row in df.iterrows(): 
    value = row['col_name'] 

或者,如果你想通過列的索引來訪問:

df = pandas.read_csv(file_path, sep=',') 
for index, row in df.iterrows(): 
    value = row.ix[0] 
+0

你好,謝謝你的回答,我有問題,這是爲什麼索引變量需要? –

+0

'index'本質上是針對行索引的。對於上面的例子,這是沒有必要的,但取決於你的用例,你可能需要它。 – ajmartin

0

您需要添加相同的每一行的值,還是需要處理的值來確定另外的價值?如果它是一致的,你可以簡單地使用熊貓來對數據集進行矩陣運算。如果需要逐行處理,上述解決方案肯定是正確的。如果它是一個必須逐行添加的變量表,您可以將它們全部轉儲到與數據集對齊的列中,使用pandas按行添加,然後打印出完整的數據框。假設你有三列添加,你把它放到一個新的列[e]。

DF [ 'E'] = df.a + df.b + df.d

,或者,如果它是一個常數:

DF [ 'E'] = df.a + DF .B + {恆定}

然後,刪除不需要的列(例如DF [ 'A']和df [ 'b']在上述)

顯然,然後,如果需要根據每行的唯一值進行計算,將這些值放入另一列並如上所述進行求和。