大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • JVM

    • JVM 架构
    • JVM 类加载机制
    • JVM 运行时数据区
    • JVM 垃圾回收机制
    • JVM 性能监控与调优
    • JVM 常见错误
  • Java

    • Java基础

      • Java 基础知识
      • Java 基础 - 枚举类
      • Java 基础 - 异常处理
      • Java 基础 - 泛型
      • Java 基础 - 反射
      • Java 基础 - 代理模式
      • Java 基础 - 注解
    • Java集合

    • Java并发编程

    • Java 开发规范
  • Scala

    • Scala 概述
  • Python

    • Numpy

      • 初识 Numpy
      • ndarray 的创建方式
      • NumPy 的数据类型
      • NumPy 数组计算
      • 拷贝
      • 索引和切片
      • 数学和统计方法
      • 数组形状变换
      • 通用函数
      • 排序
      • 搜索和计数
      • 线性代数
      • 伪随机数生成
      • 广播
      • 文件输入和输出
    • Pandas

      • 初识 Pandas
      • 认识 Series 和 DataFrame
      • Series 和 DataFrame 增删改查
      • Index对象增删改查
      • 普通列和行Index相互转化
        • 普通列转化为行索引
          • DataFrame 中的列
          • 任意列
        • 行索引转化为普通列
          • 单层列索引情况
          • 多层列索引情况
      • 快速查看整体信息
      • 数值运算
      • 合并数据集
      • 数值统计与聚合
      • 分组聚合
      • 分类类型
      • 排序和排名
      • 时间序列
      • 文件输入与输出
      • 缺失值处理
      • 字符串处理
      • pandas sql
      • 其它
  • 语言基础
  • Python
  • Pandas
Will
2022-08-04
目录

普通列和行Index相互转化

import numpy as np
import pandas as pd
from pandas import Series
from pandas import DataFrame
1
2
3
4
data = [[1,2,3],[4,5,6]]
index = ['a','b']
columns = ['A','B','C']
df = pd.DataFrame(data, index = index, columns = columns)
df
1
2
3
4
5
A B C
a 1 2 3
b 4 5 6

# 普通列转化为行索引

DataFrame.set_index(keys, drop=True, append=False, inplace=False)

  • keys:用于转化的列名称,列名或列名的列表,如果是列表则转化为多重索引;
  • drop:True or False,是否保留原列;
  • append:True or False,是否保留当前索引;
  • inplace:True or False,是否原地修改。

# DataFrame 中的列

**注意:**下面的这种用法只能处理单层列索引情况。

df.set_index('A', drop = True, append = False) #单列转化为行索引,列名作为索引的名字
1
B C
A
1 2 3
4 5 6
df.set_index(['A','B'], drop = True, append = False) # 列名的列表
1
C
A B
1 2 3
4 5 6
df.set_index(['A','C'], drop = False, append = False) # drop = False, 保留原列
1
A B C
A C
1 3 1 2 3
4 6 4 5 6
df.set_index(['A','C'], drop = False, append = True) # append = True, 保留原索引
1
A B C
A C
a 1 3 1 2 3
b 4 6 4 5 6

# 任意列

  • 普通列不是必须为 DataFrame 中的列,任何行数匹配的列表或列表的元组都可以;
  • 此方法可以处理多层列索引情况,方法是先提取需要的列,构建成元组,再来替换索引。
li = ['c','d']
df.set_index(keys = [li], append = False)# 注意是[li]不是li,如果是单层,会当做列名处理
## append为False,实现了改索引功能
1
2
3
A B C
c 1 2 3
d 4 5 6
#如果是多层索引情况,append为False,所有索性会被替换
df1 = df.set_index(keys = [li], append = True)
df1
1
2
3
A B C
a c 1 2 3
b d 4 5 6
df1.set_index(keys = [['e','f']],append = False)
1
A B C
e 1 2 3
f 4 5 6
# 元祖的列表建立多层索引
list_tuple = [('e','f'),('g','h')]
df1.set_index(keys = [list_tuple],append = False)
1
2
3
A B C
e f 1 2 3
g h 4 5 6

# 行索引转化为普通列

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')

  • level:int 或者行索引的名字,可以为列表,默认包含所有行索引。
  • drop:True or False,是否将行索引插入到列中,默认是插入;
  • inplace:是否本地修改;
  • col_level:如果列索引也是多重的,那么新插入的列设置哪一重索引;
  • col_fill:如果有多重索引,除了 col_level 已经设置的

# 单层列索引情况

df1 = df.set_index(['A','C'], drop = True, append = True)
df1
1
2
B
A C
a 1 3 2
b 4 6 5
# df1.reset_index(level = 'A', drop = False)
df1.reset_index(level = 1, drop = False) #单 行索引
1
2
A B
C
a 3 1 2
b 6 4 5
df1.reset_index(level = [1,2], drop = False) # 行索引的列表
1
A C B
a 1 3 2
b 4 6 5
# 如果所有行索引都恢复为列,那么将生成默认数值索引,如果行索引没有名字,那么生成默认的名字
df1.reset_index(level = [0,1,2], drop = False)
1
2
level_0 A C B
0 a 1 3 2
1 b 4 6 5
df1.index.set_names(names = 'ab', level = 0, inplace = True)
df1
1
2
B
ab A C
a 1 3 2
b 4 6 5
#行索引如果有名字,那么将其设置为列名
df1.reset_index(level = [0,1,2], drop = False)
1
2
ab A C B
0 a 1 3 2
1 b 4 6 5
df1.reset_index(level = [1,2], drop = True) # drop = True, 直接丢掉选中的行索引,不插入
1
B
ab
a 2
b 5

# 多层列索引情况

df1 = df.copy()
df1.columns = pd.MultiIndex.from_tuples( [('one','A'),('one','B'),('two','C')])
df1
1
2
3
one two
A B C
a 1 2 3
b 4 5 6
#多重索引下,如果行索引没有名字,那么变为列之后在列索引的外层生成了默认索引:index。
df1.reset_index(level = 0)
1
2
index one two
A B C
0 a 1 2 3
1 b 4 5 6
#多重索引下,如果行索引有名字,那么变为列之后在列索引的外层索引名作为列名。
df1.index.set_names(['ab'], inplace = True)
df1
1
2
3
one two
A B C
ab
a 1 2 3
b 4 5 6
df1.reset_index(level = 0)
1
ab one two
A B C
0 a 1 2 3
1 b 4 5 6
上次更新: 2023/11/01, 03:11:44

← Index对象增删改查 快速查看整体信息→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式