当前位置: 首页 > news >正文

python.pandas.day17

一、基础

1、概述

  • Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来

  • Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)

  • Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具

  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析

  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具

  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)

  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据

  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征

  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域

  • Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:加载数据、整理数据、操作数据、构建数据模型、分析数据

2、安装

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、内置数据结构

Pandas 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)、DataFrame(二维数据结构):

- Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等
- DataFrame 是一种表格型数据结构,它既有行标签,又有列标签

数据结构维度说明
Series1该结构能够存储各种数据类型,比如字符数、整数、浮点数、Python 对象等,Series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变
DataFrame2DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在创建该结构时,可以指定相应的索引值

4、Series

Pandas Series 类似表格中等一个列(column),类似于一维数组,可以保存任何数据类型 Series 由索引(index)和列组成,函数:

4.1 创建 Series 对象的方式

4.1.1 创建 Series 空对象
import pandas as pd
series_data = pd.Series()
print(series_data)

 直接赋值创建Series 对象

import pandas as pd
series_data = pd.Series([12,3,4,4])
print(series_data)
4.1.2 ndarray 创建 Series 对象
import pandas as pd
import numpy as np
series_data = pd.Series(np.arange(6))
print(series_data)

 

4.1.3 字典创建 Series 对象

使用字典创建对象,会以键作为标签

import pandas as pd
import numpy as np
series_data = pd.Series({'name':'zhangsan','age':23})
print(series_data)

4.2 访问 Series 数据

import pandas as pd
import numpy as np
data = np.arange(6)
series = pd.Series(data)
#一样以索引来访问数据,只不过这里的索引变为标签
for i in series:
    print(i)
#这里键变为标签
series2 = pd.Series({'name':'li','age':20})
print(series2['name'])
print(series2['age'])

4.3 Series遍历

使用 items()

import pandas as pd
import numpy as np
#index自己添加标签
series = pd.Series(np.arange(3), index=['a', 'b', 'c'])
#通过items遍历标签,还有值
for col_index,col_value in series.items():
    print(f'index:{col_index}, value:{col_value}')

使用 index 属性,value

#index自己添加标签
series = pd.Series(np.arange(3), index=['a', 'b', 'c'])
for index in series.index:
    print(index, series[index])

#value
for value in series.values:
    print(value)

4.4 Series 常用方法

4.4.1 isnull() 和 notnull()

isnull() 和 notnull() 用于检测 Series、DataFrame 中的缺失值。所谓缺失值,顾名思义就是值不存在、丢失、缺少

  • isnull():如果为值不存在或者缺失,则返回 True

  • notnull():如果值不存在或者缺失,则返回 False

  • 
    series = pd.Series([1,2,3,4,5 , None])
    print(series.isnull())
    print(series.notnull())
    #过滤掉缺失值
    print(series[series.notnull()])

     5、DataFrame

    - DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:

      <img src="./media/image-20241016171536818.png"/>

    - DataFrame 的每一行或列数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列或行标签

    - 同 Series 一样,DataFrame 自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应当然你也可以用“显式索引”的方式来设置行标签

    - DataFrame 构造方法如下:

  • 函数名参数
    pd.DataFrame( data, index, columns, dtype, copy)data:一组数据(ndarray、series, map, lists, dict 等类型) index:索引值,或者可以称为行标签 columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) dtype:数据类型 copy:默认为 False,表示复制数据 data
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df)

 5.1 创建 DataFrame 对象

**创建 DataFrame 对象的方式:**

- 列表
- 字典
- Series 
- Numpy ndarrays
- 另一个 DataFrame

 

5.1.2 列表嵌套字典创建 DataFrame 对象

案例:如果其中某个元素值缺失,也就是字典的 key 无法找到对应的 value,将使用 NaN 代替。

import pandas as pd
import numpy as np
data = [{'name':"zhangsan", 'age':23},{'name':'lis','age':23,'gender':'nan'}]
df = pd.DataFrame(data)
print(df)

 

 创建Dataframe,指定列

data = [{'name': "张三", 'age': 18},{'name': "小红", 'gender': "男", 'age': 19}]
#指定的列标签
result = pd.DataFrame(data=data,columns=['name','age'])
result1 = pd.DataFrame(data=data,columns=['name','gender'])
print(result)
print(result1)
5.1.3 字典嵌套列表创建 DataFrame 对象
data = {'name':['zhangsan','lisi','wangwu'],'age':[23,23,23]}
df = pd.DataFrame(data)
print(df)

 

5.2 列索引操作

DataFrame 可以使用列索(columns index)引来完成数据的选取、添加和删除操作

5.2.1 选取数据

data = {'name':['zhangsan','lisi','wangwu'],'age':[23,23,23]}
df = pd.DataFrame(data)
print(df)
#以列标签选取
print(df['name'])
print(df['age'])

 

5.2.2 添加数据

案例1:添加一列空列

注意要添加的数据要与行保持一致


data = {'name':['zhangsan','lisi','wangwu'],'age':[23,23,23]}
df = pd.DataFrame(data)
print(df)
#以列标签选取
print(df['name'])
print(df['age'])
df['gender'] = ['male','female','male']
print(df)

 

在指定的位置插入新列

使用insert方法在指定位置插入新列,参数:

  • loc: 插入位置的列索引。

  • column: 新列的名称。

  • value: 要插入的 Series

data = {'name':['zhangsan','lisi','wangwu'],'age':[23,23,23]}
df = pd.DataFrame(data)
print(df)
#列索引为整数不是标签名
df.insert(1,'gender',['male','female','male',])
print(df)

 

5.2.3 修改数据

案例1:修改列的值

import pandas as pd

# 修改数据
def ten():
    data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
            'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
    result = pd.DataFrame(data=data)
    print(result)
    result['two'] = pd.Series(data=[1,2,3],index=['a','b','c'])
    print("修改数据:")
    print(result)

修改列名

# 修改数据
data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
result.columns=['A', 'B']
print(result)

修改列的数据类型

data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
result.columns=['A', 'B']
result['A'].astype(np.float64)
print(result['A'].dtypes)
5.2.4 删除数据

. 通过drop方法删除 DataFrame 中的数据,默认情况下,drop() 不会修改原 DataFrame,而是返回一个新的 DataFrame。

1. **labels**:
   - **类型**:单个标签或列表。
   - **描述**:要删除的行或列的标签。如果 axis=0,则 labels 表示行标签;如果 axis=1,则 labels 表示列标签。
2. **axis**:
   - **类型**:整数或字符串,默认为 0。
   - **描述**:指定删除的方向。axis=0 或 axis='index' 表示删除行,axis=1 或 axis='columns' 表示删除列。
3. index:
   - **类型**:单个标签或列表,默认为 None。
   - **描述**:要删除的行的标签。如果指定,则忽略 labels 参数。
4. columns:
   - **类型**:单个标签或列表,默认为 None。
   - **描述**:要删除的列的标签。如果指定,则忽略 labels 参数。
5. level:
   - **类型**:整数或级别名称,默认为 None。
   - **描述**:用于多级索引(MultiIndex),指定要删除的级别。
6. **inplace**:
   - **类型**:布尔值,默认为 False。
   - **描述**:如果为 True,则直接修改原 DataFrame,而不是返回一个新的 DataFrame。
7. errors:
   - **类型**:字符串,默认为 'raise'。
   - **描述**:指定如何处理不存在的标签。'raise' 表示抛出错误,'ignore' 表示忽略错误。

**案例1:**删除列

data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
result.drop('two', axis='columns', inplace=True)
print(result)

案例2:删除行

data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
result.drop('a', axis='index', inplace=True)
print(result)

5.3 行索引操作

5.3.1 loc 选取数据

df.loc[] 只能使用标签索引,不能使用整数索引。当通过标签索引的切片方式来筛选数据时,它的取值前闭后闭,也就是只包括边界值标签(开始和结束)

loc方法返回的数据类型:

1.如果选择单行或单列,返回的数据类型为Series

2.选择多行或多列,返回的数据类型为DataFrame

3.选择单个元素(某行某列对应的值),返回的数据类型为该元素的原始数据类型(如整数、浮点数等)。

data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
print(result.loc['a'])
print(result.loc['b':'c'])
5.3.2 iloc 选取数据

iloc 方法用于基于位置(integer-location based)的索引,即通过行和列的整数位置来选择数据。

参数

  • row_indexer:行位置或布尔数组。

  • column_indexer:列位置或布尔数组

 

data = {'one': pd.Series(data=[1, 2, 3], index=['a', 'b', 'c']),
        'two': pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
result = pd.DataFrame(data=data)
print(result.iloc[0])  # 选择第 0 行的数据
print(result.iloc[0:2])  # 选择第 0 到 1 行的数据
print(result.iloc[0, 1])  # 选择第 0 行,第 1 列的元素
print(result.iloc[[0, 1], [0, 1]])  # 选择第 0 和 1 行,第 0 和 1 列的数据
5.3.4 添加数据行

loc方法添加新行

# 创建一个 DataFrame
data = {
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])

# 添加新行 'e'
df.loc['e'] = [17, 18, 19, 20]

print("添加新行后的 DataFrame:")
print(df)

concat拼接

**参数**:

**objs**: 要连接的 DataFrame 或 Series 对象的列表或字典。

**axis**: 指定连接的轴,0 或 'index' 表示按行连接,1 或 'columns' 表示按列连接。

**join**: 指定连接方式,'outer' 表示并集(默认),'inner' 表示交集。

**ignore_index**: 如果为 True,则忽略原始索引并生成新的索引。

keys: 用于在连接结果中创建层次化索引。

levels: 指定层次化索引的级别。

names: 指定层次化索引的名称。

verify_integrity: 如果为 True,则在连接时检查是否有重复索引。

sort: 如果为 True,则在连接时对列进行排序。

copy: 如果为 True,则复制数据。

案例1:按行连接(垂直堆叠

# 创建两个示例 DataFrame
df1 = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

df2 = pd.DataFrame({
    'A': [7, 8, 9],
    'B': [10, 11, 12]
})

# 按行连接 df1 和 df2
result = pd.concat([df1, df2], axis=0)

print(result)

按列连接(水平堆叠)

# 创建两个示例 DataFrame
df1 = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

df2 = pd.DataFrame({
    'C': [7, 8, 9],
    'D': [10, 11, 12]
})

# 按列连接 df1 和 df2
result = pd.concat([df1, df2], axis=1)

print(result)

使用 ignore_index

# 创建两个示例 DataFrame
df1 = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

df2 = pd.DataFrame({
    'A': [7, 8, 9],
    'B': [10, 11, 12]
})

# 按行连接 df1 和 df2,并忽略原始索引
result = pd.concat([df1, df2], axis=0, ignore_index=True)

print(result)

案例4:使用 join='inner',按行合并

# 创建两个示例 DataFrame
df1 = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
}, index=[0, 1, 2])

df2 = pd.DataFrame({
    'A': [7, 8, 9],
    'B': [10, 11, 12],
    'D': [13, 14, 15]
}, index=[1, 2, 3])

# 按行合并,只匹配column相同的列,行被堆叠
result = pd.concat([df1, df2], axis=0, join='inner')
print(result)
# 按列合并,只匹配index相同的行,列被堆叠
result = pd.concat([df1, df2], axis=1, join='inner')
print(result)

二、函数

1、常用的统计学函数

函数名称描述说明
count()统计某个非空值的数量
sum()求和
mean()求均值
median()求中位数
std()求标准差
min()求最小值
max()求最大值
abs()求绝对值
prod()求所有数值的乘积
# 创建一个示例 DataFrame
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

# 计算每列的均值
mean_values = df.mean()
print(mean_values)

# 计算每列的中位数
median_values = df.median()
print(median_values)

#计算每列的方差
var_values = df.var()
print(var_values)

# 计算每列的标准差
std_values = df.std()
print(std_values)

# 计算每列的最小值
min_values = df.min()
print("最小值:")
print(min_values)

# 计算每列的最大值
max_values = df.max()
print("最大值:")
print(max_values)

# 计算每列的总和
sum_values = df.sum()
print(sum_values)

# 计算每列的非空值数量
count_values = df.count()
print(count_values)

 

2、重置索引

重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

reindex

reindex() 方法用于重新索引 DataFrame 或 Series 对象。重新索引意味着根据新的索引标签重新排列数据,并填充缺失值。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

相关文章:

  • Linux--命令行操作
  • AI for CFD入门指南(传承版)
  • centOS 7.9 65bit 修复Openssh漏洞
  • 使用QT画带有透明效果的图
  • 魔法原子,以全栈自研撬动人形机器人通用化未来
  • 【免费分享】PSO-BP特征重要性分析matlab语言
  • BFS解决最短路径问题(使用BFS解决最短路径问题的黄金法则)
  • Python生成整数序列之 range()函数
  • 《C++11:bind绑定器与function包装器》
  • Kotlin when 表达式完全指南:从基础到高级的12种实战用法
  • Redis的深入了解
  • 页面类buttons权限的简单控制
  • MySQL学习日志--多表查询篇
  • NDK CMake工程中引入其他C++三方库
  • 视频格式转换:畅享多平台无缝视频体验
  • 31天Python入门——第16天:模块与库详解
  • StarRocks语句解析json字符串的方法
  • 还刷刷刷刷刷
  • 洛谷1044栈C语言
  • 2025Java面试TOP1000问:源码级解答+避坑指南+性能优化
  • 郑州电商网站建设/浏览器下载安装2022最新版
  • 营销型网站建设培训/大数据获客系统
  • 崆峒区城乡建设局网站/百度开户多少钱
  • 常州高端网站建设公司/关键词分析软件
  • 建设网站的骗局是什么/广告推广语
  • 购物网站html代码/如何快速推广app