9

我正在将一个文本文件导入 pandas,并想连接文件中的 3 列以创建索引。

我愿意通过 1 个或多个步骤执行此操作。我可以在创建 DataFrame 的同时进行转换,也可以创建 DataFrame 并使用新创建的列对其进行重组。知道如何以两种方式做到这一点对我来说是最有帮助的。

我最终希望索引是连接前 3 列中的值的值。

4

2 回答 2

13

如果您的列由字符串组成,您可以只使用+运算符(在字符串的上下文中添加是在 python 中连接它们,pandas 遵循此):

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

然后,如果创建了此列,您可以只使用set_index更改索引

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

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

请注意,这pd.concat不是“连接”字符串,而是连接系列/数据帧,因此将不同数据帧或系列的列或行一起添加到一个数据帧中(而不是将几行/列添加到一行/列中)。请参阅http://pandas.pydata.org/pandas-docs/dev/merging.html以获得对此的详细解释。

于 2013-07-23T22:46:13.513 回答
1

如果您read_csv用于导入文本文件,则有一个index_col参数可以将列名或数字列表传递给。这将最终创建一个MultiIndex- 我不确定这是否适合您的应用程序。

如果您想将索引显式连接在一起(假设它们是字符串),您似乎可以使用+运算符这样做。(警告,前面有未经测试的代码)

df['concatenated'] = df['year'] + df['month']
df.set_index('concatenated')
于 2013-07-23T20:26:47.950 回答