2013-07-23 31 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