看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.DataFrame.set_index 函数用于将 DataFrame 中的一个或多个列设置为索引。设置索引后,可以更高效地进行数据检索和操作。
DataFrame.set_index(keys, *, drop=True, append=False, inplace=False, verify_integrity=False)
使用一个或多个现有列或数组(长度正确)设置 DataFrame 的索引(行标签)。索引可以替换现有索引或对其进行扩展。
参数:
keys
:标签或类似数组或标签/数组列表Series
、Index
、np.ndarray
和 Iterator
的实例。drop
:布尔值,默认 True
append
:布尔值,默认 False
inplace
:布尔值,默认 False
verify_integrity
:布尔值,默认 False
False
将提高此方法的性能。返回值:
DataFrame
或 None
inplace=True
则为 None
。相关方法:
DataFrame.reset_index
set_index
的相反操作。DataFrame.reindex
DataFrame.reindex_like
代码示例如下:
>>> df = pd.DataFrame({'month': [1, 4, 7, 10],
... 'year': [2012, 2014, 2013, 2014],
... 'ale': [55, 40, 84, 31]})
>>> df
month year sale
0 1 2012 55
1 4 2014 40
2 7 2013 84
3 10 2014 31
# 将索引设置为成为‘month’列:
>>> df.set_index('month')
year sale
month
1 2012 55
4 2014 40
7 2013 84
10 2014 31
# 使用列‘year’和‘month’创建一个 MultiIndex:
>>> df.set_index(['year', 'onth'])
sale
year month
2012 1 55
2014 4 40
2013 7 84
2014 10 31
# 使用一个 Index 和一个列创建一个 MultiIndex:
>>> df.set_index([pd.Index([1, 2, 3, 4]), 'year'])
month sale
year
1 2012 1 55
2 2014 4 40
3 2013 7 84
4 2014 10 31
# 使用两个 Series 创建一个 MultiIndex:
>>> s = pd.Series([1, 2, 3, 4])
>>> df.set_index([s, s**2])
month year sale
1 1 1 2012 55
2 4 4 2014 40
3 9 7 2013 84
4 16 10 2014 31
Series 也有 reset_index()
方法。语法为:
Series.reset_index(level=None,
*,
drop=False,
name=_NoDefault.no_default,
inplace=False,
allow_duplicates=False
)
这在需要将索引视为列,或者索引无意义且需要在进行其他操作之前重置为默认值时非常有用。
参数:
level
:整数、字符串、元组或列表,默认可选drop
:布尔值,默认 Falsename
:对象,可选self.name
。当 drop
为 True 时,此参数将被忽略。inplace
:布尔值,默认 Falseallow_duplicates
:布尔值,默认 False返回值:
Series
或 DataFrame
或 None
drop
为 False(默认值)时,返回一个 DataFrame。新创建的列将在 DataFrame 中排在前面,后面是原始的 Series 值。当 drop
为 True 时,返回一个 Series。在任何一种情况下,如果 inplace
为 True,则不返回任何值。示例:
>>> s = pd.Series([1, 2, 3, 4], name='foo',
... index=pd.Index(['a', 'b', 'c', 'd'], name='idx'))
# 生成具有默认索引的 DataFrame。
>>> s.reset_index()
idx foo
0 a 1
1 b 2
2 c 3
3 d 4
# 要指定新列的名称,请使用 name。
>>> s.reset_index(name='values')
idx values
0 a 1
1 b 2
2 c 3
3 d 4
# 要生成一个新的 Series 并将默认设置为 drop 为 True。
>>> s.reset_index(drop=True)
0 1
1 2
2 3
3 4
Name: foo, dtype: int64
# 对于具有多级索引的 Series,level 参数很有用。
>>> arrays = [np.array(['bar', 'bar', 'baz', 'baz']),
... np.array(['one', 'two', 'one', 'two'])]
>>> s2 = pd.Series(
... range(4), name='foo',
... index=pd.MultiIndex.from_arrays(arrays,
... names=['a', 'b']))
# 要删除索引的特定级别,请使用 level。
>>> s2.reset_index(level='a')
a foo
b
one bar 0
two bar 1
one baz 2
two baz 3
# 如果未设置 level,则从索引中删除所有级别。
>>> s2.reset_index()
a b foo
0 bar one 0
1 bar two 1
2 baz one 2
3 baz two 3
更新时间:July 10, 2024, 1:57 p.m. 标签:pandas python 索引 setindex