将csv数据加载到pandas数据帧后如何添加MultiIndex?

时间:2019-03-27 13:15:41

标签: python pandas dataframe

在将csv数据加载到现有的pandas数据框中后,我尝试向其添加其他索引行。

所以说我这样加载数据:

columns = ['Relative_Pressure','Volume_STP']
df = pd.read_csv(StringIO(contents), skiprows=4, delim_whitespace=True,index_col=False,header=None)
df.columns = columns

其中contents是csv格式的字符串。产生的DataFrame可能看起来像这样:

Imported csv data

出于清楚的原因,我现在想向DataFrame添加其他索引行,如here所示:

MulitIndex dataframe

但是,在链接中,创建DataFrame时会立即生成这些多个索引行。我想添加例如列中unitdescr的行。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以通过专门创建索引,然后将其分别分配给各列,而不用读取数据,从而在各列上创建MultiIndex

我将使用link you provided中的示例。第一种方法是在制作数据框时创建MultiIndex:

df = pd.DataFrame({('A',1,'desc A'):[1,2,3],('B',2,'desc B'):[4,5,6]})
df.columns.names=['NAME','LENGTH','DESCRIPTION']
df

NAME             A      B
LENGTH           1      2
DESCRIPTION desc A desc B
0                1      4
1                2      5
2                3      6

如上所述,这不是您想要的。相反,您可以制作数据框(例如,从文件中获取),然后从一组列表中制作MultiIndex,然后将其分配给列:

df = pd.DataFrame({'desc A':[1,2,3], 'desc B':[4,5,6]})

# Output
   desc A  desc B
0       1       4
1       2       5
2       3       6

# Create a multiindex from lists
index = pd.MultiIndex.from_arrays((['A', 'B'],  [1, 2], ['desc A', 'desc B']))

# Assign to the columns
df.columns = index


# Output
       A      B
       1      2
  desc A desc B
0      1      4
1      2      5
2      3      6


# Name the columns
df.columns.names = ['NAME','LENGTH','DESCRIPTION']

# Output
NAME             A      B
LENGTH           1      2
DESCRIPTION desc A desc B
0                1      4
1                2      5
2                3      6

还有其他构造MultiIndex的方法,例如from_tuplesfrom_product。您可以阅读有关Multi Indexes in the documentation的更多信息。