大数据知识体系
首页
数据结构与算法
  • 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
          • 预览
          • 创建
          • DataFrame 函数创建
          • 由 csv 文件创建
          • 由 excel 文件创建
      • Series 和 DataFrame 增删改查
      • Index对象增删改查
      • 普通列和行Index相互转化
      • 快速查看整体信息
      • 数值运算
      • 合并数据集
      • 数值统计与聚合
      • 分组聚合
      • 分类类型
      • 排序和排名
      • 时间序列
      • 文件输入与输出
      • 缺失值处理
      • 字符串处理
      • pandas sql
      • 其它
  • 语言基础
  • Python
  • Pandas
Will
2022-08-04
目录

认识 Series 和 DataFrame

import numpy as np
import pandas as pd
from pandas import Series
from pandas import DataFrame
1
2
3
4

# Series

Series 是 pandas 中暴露给我们使用的基本对象,它是由相同元素类型构成的一维数据结构,同时具有列表和字典的特点

# 预览

data = [1, 2, 3, 4, 5]
index = ['a', 'b', 'c', 'd', 'e']
s = Series(data, index=index)
s
1
2
3
4
a    1
b    2
c    3
d    4
e    5
dtype: int64
s.index
1
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
s.name
1
s.values
1
array([1, 2, 3, 4, 5])
s.dtype
1
dtype('int64')
s.shape
1
(5,)

# 创建

Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

# 无索引创建

  • 如果 data 为 ndarray(1D) 或 list(1D),那么其缺少 Series 需要的索引信息
  • 如果提供 index,则必须和 data 长度相同
  • 如果不提供 index,那么其将生成默认数值索引 range(0, data.shape[0])
# data = [1,2,3]
data1 = np.array([1,2,3])
index1 = ['a','b','c']
s = pd.Series(data = data1, index = index1)
s
1
2
3
4
5
a    1
b    2
c    3
dtype: int64

# 有索引创建

  • 如果 data 为 Series 或 dict ,那么其已经提供了 Series 需要的索引信息,所以 index 项是不需要提供的
  • 如果额外提供了 index 项,那么其将对当前构建的 Series 进行覆盖
# data = pd.Series([a,b,c], index = ['a','b','c'] )
data2 = { 'a':1, 'b':2,'c':3 }
index2 = ['a','b','d']
s = pd.Series(data=data2)
s
1
2
3
4
5
a    1
b    2
c    3
dtype: int64

# DataFrame

DataFrame 由具有共同索引的 Series 按列排列构成(2D),是使用最多的对象,可以将其想象成一个 Excel 表来处理

# 预览

data = [[1,2,3],
        [4,5,6]]
index = ['a','b']
columns = ['A','B','C']
df = pd.DataFrame(data=data, index=index, columns=columns)
df
1
2
3
4
5
6
A B C
a 1 2 3
b 4 5 6
df.index  # 行索引
1
Index(['a', 'b'], dtype='object')
df.columns  # 列索引,与Series的name一个意思
1
Index(['A', 'B', 'C'], dtype='object')
df.values
1
array([[1, 2, 3],
       [4, 5, 6]])
df.shape
1
(2, 3)
df.dtypes # dtype加s
1
A    int64
B    int64
C    int64
dtype: object

# 创建

# DataFrame 函数创建

DataFrame(data=None, index=None, columns=None)

函数由多个参数,对我们有用的主要是:data,index和columns三项

data 无行索引,无列索引:

  • 如果 data 为 ndarray(2D) or list(2D),那么其缺少 DataFrame 需要的行、列索引信息
  • 如果提供 index 或 columns 项,其必须和 data 的行 或 列长度相同
  • 如果不提供 index 或 columns 项,那么其将默认生成数值索引 range(0, data.shape[0])) 或 range(0, data.shape[1])。
# data = [[1,2,3],
#        [4,5,6]]
data1 = np.array([[1,2,3],
                [4,5,6]] )
index1 = ['a','b']
columns1 = ['A','B','C']
df = pd.DataFrame(data1, index=index1, columns=columns1)
df
1
2
3
4
5
6
7
8
A B C
a 1 2 3
b 4 5 6

data 无行索引,有列索引:

  • 如果 data 为 dict of ndarray(1D) or list(1D),所有 ndarray 或 list 的长度必须相同。且 dict 的 key 为 DataFrame 提供了需要的 columns 信息,缺失 index
  • 如果提供 index 项,必须和 list 的长度相同
  • 如果不提供 index,那么其将默认生成数值索引 range(0, data.shape[0]))
  • 如果还额外提供了 columns 项,那么其将对当前构建的 DataFrame 进行 列重索引
data2 = {'A' : [1,4], 'B': [2,5], 'C':[3,6]}
index2 = ['a','b']
columns2 = ['A','B','D']
df = pd.DataFrame(data2)
df
1
2
3
4
5
A B C
0 1 2 3
1 4 5 6

data 有行索引,有列索引:

  • 如果 data 为 dict of Series or dict,那么其已经提供了 DataFrame 需要的所有信息
  • 如果多个 Series 或 dict 间的索引不一致,那么取并操作(pandas 不会试图丢掉信息),缺失的数据填充 NaN
  • 如果提供了 index 项或 columns 项,那么其将对当前构建的 DataFrame 进行 重索引(reindex,pandas 内部调用接口)
# data3 = { 'A' : pd.Series([1,4] ,index = ['a','b']), 'B' : pd.Series([2,5] ,index = ['a','b']), 'C' : pd.Series([3,6] ,index = ['a','c']) }
data3 = { 'A' : { 'a':1, 'b':4}, 'B': {'a':2,'b':5}, 'C':{'a':3, 'c':6} }
df = pd.DataFrame(data3)
df
1
2
3
4
A B C
a 1.0 2.0 3.0
b 4.0 5.0 NaN
c NaN NaN 6.0

# 由 csv 文件创建

pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, encoding=None),read_csv 的参数很多,但这几个参数就够我们使用了:

  • filepath_or_buffer:路径和文件名不要带中文,带中文容易报错
  • sep: csv 文件数据的分隔符,默认是',',根据实际情况修改
  • header:如果有列名,那么这一项不用改
  • names:如果没有列名,那么必须设置 header = None, names 为列名的列表,不设置默认生成数值索引
  • index_col:int 型,选取这一列作为索引
  • encoding:根据你的文档编码来确定,如果有中文读取报错,试试 encoding = 'gbk'
csv_df = pd.read_csv( 'files/csv_test.csv')
csv_df.head()
1
2
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
csv_df.index
1
RangeIndex(start=0, stop=244, step=1)
csv_df.columns
1
Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], dtype='object')
csv_df.values
1
array([[16.99, 1.01, 'Female', ..., 'Sun', 'Dinner', 2],
       [10.34, 1.66, 'Male', ..., 'Sun', 'Dinner', 3],
       [21.01, 3.5, 'Male', ..., 'Sun', 'Dinner', 3],
       ...,
       [22.67, 2.0, 'Male', ..., 'Sat', 'Dinner', 2],
       [17.82, 1.75, 'Male', ..., 'Sat', 'Dinner', 2],
       [18.78, 3.0, 'Female', ..., 'Thur', 'Dinner', 2]], dtype=object)

# 由 excel 文件创建

pd.read_excel(io, sheetname=0, header=0, index_col=None, names=None),read_excel 的参数很多,但这几个参数就够我们使用了:

  • header:如果有列名,那么这一项不用改;
  • names:如果没有列名,那么必须设置 header = None, names 为列名的列表,不设置默认生成数值索引;
  • index_col:int 型,选取这一列作为索引。
excel_df = pd.read_excel('files/excel_test.xls')
excel_df.head()
1
2
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
上次更新: 2023/11/01, 03:11:44

← 初识 Pandas Series 和 DataFrame 增删改查→

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