pandas把index变成列
1. 概述
pandas是一种开源的数据分析和数据处理库,提供了丰富的功能和高效的数据结构,特别适用于处理结构化数据。在pandas中,DataFrame是最常用的数据结构之一,它类似于一张二维表格,包含了行和列的数据。
在DataFrame中,每一行都有一个唯一的标识符,称为index。该index在数据处理中起到了重要的作用,可以用来定位和操作数据。然而,在某些情况下,我们可能需要将index变成一个普通的列,以便更灵活地进行数据处理和分析。本文将详细介绍pandas如何把index变成列。
2. pandas.DataFrame.reset_index方法
pandas提供了reset_index方法,可以将DataFrame中的index重新设置为默认的整数index,并将原来的index作为一个新的列添加到DataFrame中。reset_index方法的原型如下:
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
参数说明:
- level:可选参数,用于指定需要重置的index级别。默认为None,表示重置所有级别的index。可以是int、str、tuple、list类型的值。
- drop:可选参数,是否丢弃原来的index,默认为False,即保留原来的index。
- inplace:可选参数,是否在原DataFrame上直接修改,默认为False,即返回一个新的DataFrame。
- col_level:可选参数,用于指定需要添加的列的层级。默认为0,表示添加到最外层。
- col_fill:可选参数,用于指定当添加的列的层级超过现有的列层级时,使用的填充值。默认为空字符串”。
下面我们通过示例来说明reset_index方法的用法。
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c'])
print("原始DataFrame:")
print(df)
# 调用reset_index方法,将index重置为默认的整数index
new_df = df.reset_index()
print("重置index后的DataFrame:")
print(new_df)
输出:
原始DataFrame:
A B
a 1 4
b 2 5
c 3 6
重置index后的DataFrame:
index A B
0 a 1 4
1 b 2 5
2 c 3 6
从输出可以看出,原始DataFrame的index被重置为了默认的整数index,并添加了一个名为”index”的新列。
3. 设置index名称
在上面的示例中,我们可以看到,新添加的列默认名称为”index”。如果我们希望给这个新添加的列一个更有意义的名称,可以使用rename方法来修改列名称。
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c'])
print("原始DataFrame:")
print(df)
# 调用reset_index方法,将index重置为默认的整数index
new_df = df.reset_index()
new_df = new_df.rename(columns={'index': 'ID'})
print("重置index并修改列名称后的DataFrame:")
print(new_df)
输出:
原始DataFrame:
A B
a 1 4
b 2 5
c 3 6
重置index并修改列名称后的DataFrame:
ID A B
0 a 1 4
1 b 2 5
2 c 3 6
从输出可以看出,新添加的列名称被修改为了”ID”。
4. 将指定的index级别变成列
除了重置所有index级别之外,reset_index方法还支持将指定的某个或多个index级别变成列。我们可以通过level参数来指定需要变成列的index级别。
import pandas as pd
# 创建一个多级索引的DataFrame
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=('A', 'B'))
df = pd.DataFrame({'C': [1, 2, 3, 4, 5, 6, 7, 8]}, index=index)
print("原始DataFrame:")
print(df)
# 调用reset_index方法,将第一级index变成列
new_df = df.reset_index(level=0)
print("将第一级index变成列后的DataFrame:")
print(new_df)
输出:
原始DataFrame:
C
A B
bar one 1
two 2
baz one 3
two 4
foo one 5
two 6
qux one 7
two 8
将第一级index变成列后的DataFrame:
A C
B
one bar 1
two bar 2
one baz 3
two baz 4
one foo 5
two foo 6
one qux 7
two qux 8
从输出可以看出,第一级索引”bar”、”baz”、”foo”和”qux”被变成了一个新的列。
5. 将所有index级别变成列
如果我们希望将所有的index级别都变成列,可以将level参数设置为列表形式的多个级别。
import pandas as pd
# 创建一个多级索引的DataFrame
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'],
['x', 'x', 'y', 'y', 'z', 'z', 'w', 'w']]
index = pd.MultiIndex.from_arrays(arrays, names=('A', 'B', 'C'))
df = pd.DataFrame({'D': [1, 2, 3, 4, 5, 6, 7, 8]}, index=index)
print("原始DataFrame:")
print(df)
# 调用reset_index方法,将所有index变成列
new_df = df.reset_index(level=[0, 1, 2])
print("将所有index变成列后的DataFrame:")
print(new_df)