Pandas进阶

一、Pandas索引

1.行索引

#创建Series
s=np.Series(np.random.rand(5),index=list('abcde'))
#对行索引命名
s.index.name='alpha'
#获取行索引
s.index

2.列索引

df = pd.DataFrame(np.random.randn(4, 6), index=list('ADFH'), columns=['one', 'two', 'three', 'four', 'five', 'six'])
#行索引
df.index
#列索引
df.columns

3.索引类

pandas 中有许多内置索引,其中包括:

  • pd.CategoricalIndex
  • pd.DatetimeIndex
  • pd.Float64Index
  • pd.Index
  • pd.Int64Index
  • pd.IntervalIndex
  • pd.MultiIndex
  • pd.PeriodIndex
  • pd.RangeIndex
  • pd.TimedeltaIndex
  • pd.UInt64Index

4.重复索引

可创建索引值重复的索引:

s=pd.Series(np.arrange(6),index=list('abcdea')

对于重复的索引值,依旧返回Series;

s['a']

对于非重复的索引值,则返回索引到的数据;

s['c']
  • 判断 Series 中是否为唯一索引
s.index.is_unique
  • 返回所有非重复的索引值的列表
s.index.unique()

5.多层索引

  • 层次化索引
    可以使数据在一个轴上有多个索引级别。即可以用二维的数据表达更高维度的数据,使数据组织方式更清晰。它使用 pd.MultiIndex 类来表示。

  • 层次化索引有什么作用?
    比如我们在分析股票数据,我们的一级行索引可以是日期;二级行索引可以是股票代码,列索引可以是股票的交易量,开盘价,收盘价等等。这样我们就可以把多个股票放在同一个时间维度下进行考察和分析。

1)创建

  • Series多层索引的创建
[in]:
a = [['a', 'a', 'a', 'b', 'b', 'c', 'c'], [1, 2, 3, 1, 2, 2, 3]]
tuples = list(zip(*a))
tuples

[out]:
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('c', 2), ('c', 3)]

[in]:
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
index

[out]:
MultiIndex(levels=[[u'a', u'b', u'c'], [1, 2, 3]],
           labels=[[0, 0, 0, 1, 1, 2, 2], [0, 1, 2, 0, 1, 1, 2]],
           names=[u'first', u'second'])
[in]:
s = pd.Series(np.random.randn(7), index=index)
s

[out]:
first  second
a      1        -1.192113
       2         0.226627
       3         0.390052
b      1         0.045297
       2         1.552926
c      2         0.014007
       3        -0.257103
dtype: float64

由此就创建了一个多层索引数据
第一层索引’first’的索引值为a.b.c;
第二层索引‘second’的索引值为 1.2.3;

Series多层索引的使用:
例 1:

[in]:
s['b']

[out]:
second
1    0.045297
2    1.552926
dtype: float64

例 2:

[in]:
s['b':'c']

[out]:
first  second
b      1         0.045297
       2         1.552926
c      2         0.014007
       3        -0.257103
dtype: float64
  • DataFrame 多层索引的创建:
[in]:
df = pd.DataFrame(np.random.randint(1, 10, (4, 3)), 
                  index=[['a', 'a', 'b', 'b'], ['A', 'B', 'A', 'B']], 
                  columns=[['one', 'one', 'two'], ['blue', 'red', 'blue']])
df.index.names = ['row-1', 'row-2']
df.columns.names = ['col-1', 'col-2']
df

在这里插入图片描述DataFrame多层索引的使用:

[in]:
df.loc['a','B']

[out]:
col-1  col-2
one    blue     7
       red      2
two    blue     4
Name: (a, B), dtype: int64

2)索引交换

[in]:
df2 = df.swaplevel('row-1', 'row-2')

交换前:
在这里插入图片描述交换后:
在这里插入图片描述

3)按照索引层次进行统计

#按照一级索引进行求和
df.sum(level=0)

#按照二级索引进行求和
df.sum(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值