2013-07-23 32 views
6

我正在將文本文件導入到熊貓中,並且想要連接文件中的3列以創建索引。連接列作爲熊貓中的索引

我打算在1個或多個步驟中完成此操作。我可以在創建DataFrame的同時執行轉換,也可以創建DataFrame並使用新創建的列對其進行重構。知道如何做到這一點對我來說都是最有幫助的。

我最終希望將索引作爲連接前3列中的值的值。

+0

「連接值」是什麼意思?它是你想要連接的字符串嗎?或者你想要一個多索引? – joris

+0

多索引不起作用。我只是想連接3個字符串。每個人都在一個單獨的DataFrame字段中。 – DJElbow

+0

它會幫助您發佈數據(或至少其中的一部分)和您的代碼到目前爲止 – Jeff

回答

9

如果列包含字符串,你可以只使用+操作(除了在字符串的情況下是將它們串聯在Python,和熊貓遵循以下):

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame({'year':['2012', '2012'], 'month':['01', '02']}) 

In [3]: df 
Out[3]: 
    month year 
0 01 2012 
1 02 2012 

In [4]: df['concatenated'] = df['year'] + df['month'] 

In [5]: df 
Out[5]: 
    month year concatenated 
0 01 2012  201201 
1 02 2012  201202 

然後,如果創建此列,你可以使用​​更改索引

In [6]: df = df.set_index('concatenated') 

In [7]: df 
Out[7]: 
      month year 
concatenated 
201201   01 2012 
201202   02 2012 

請注意,pd.concat不是'concat'enate字符串,而是串聯/數據幀,以便將不同數據框或系列的列或行一起添加到一個數據框(而不是將幾行/列添加到一行/列中)。請參閱http://pandas.pydata.org/pandas-docs/dev/merging.html以獲得對此的廣泛解釋。

+0

這是一個!謝謝! – DJElbow

+1

如果月份和年份數據是整數,可以連接:'df ['concatenated'] = df ['year']。apply(str)+ df ['month']。apply(str)'' – Webucator

0

如果您使用read_csv來導入您的文本文件,則有一個index_col參數,您可以從pass a list of column names or numbers到。這將最終創建MultiIndex - 我不確定是否適合您的應用程序。

如果你想明確地連接你的索引(假設它們是字符串),看起來你可以使用+運算符。 (警告,未經測試的提前代碼)

df['concatenated'] = df['year'] + df['month'] 
df.set_index('concatenated') 
+0

聽起來合乎邏輯,但是當我嘗試它時,我得到一個「Reindexing只對有唯一值的索引對象有效」錯誤。有什麼我失蹤? DataFrame具有默認的自動遞增索引,所以我知道它是唯一的。 – DJElbow

+0

@DJElbow:看起來像一組串聯字段有重複。索引必須是唯一的。 – voithos

+0

只是爲了澄清 - 我在重置索引之前出現此錯誤。這是我正在使用的測試代碼是拋出錯誤:訪問['concatenated'] = pd.concat([訪問['年'],訪問['月']]) – DJElbow