学习python第12天

今日任务:

DataFrame

DataFrame的构造

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

参数说明:

  • data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。

  • index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。

  • columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。

  • dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如 np.int64np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。

  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。


DataFrame的创建

  • 用列表
import pandas as pddata = [
['Google', 10], 
['Runoob', 12], 
['Wiki', 13]]# 创建DataFrame
df = pd.DataFrame(data, columns=['Site', 'Age'])# 使用astype方法设置每列的数据类型
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(float)print(df)
  •  用数组
import numpy as np
import pandas as pd# 创建一个包含网站和年龄的二维ndarray
ndarray_data = np.array([['Google', 10],['Runoob', 12],['Wiki', 13]
])# 使用DataFrame构造函数创建数据帧
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])# 打印数据帧
print(df)​
  • 用字典,按列
import pandas as pddata = {
'Site':['Google', 'Runoob', 'Wiki'], 
'Age':[10, 12, 13]
}df = pd.DataFrame(data)print (df)
  • 用字典,按行,没有对应的部分数据为 NaN
import pandas as pddata = [{'a': 1, 'b': 2},
{'a': 5, 'b': 10, 'c': 20}]df = pd.DataFrame(data)print (df)

返回指定数据

  • 按索引名

返回单行,结果其实是一个Series,该Series的索引名是DataFrame的列名,列名是DataFrame的索引名

import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])

    结果:

    calories    420
    duration     50
    Name: 0, dtype: int64
    calories    380
    duration     40
    Name: 1, dtype: int64
    

    返回多行,结果其实是一个DataFrame,列名索引名不变

    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
    }# 数据载入到 DataFrame 对象
    df = pd.DataFrame(data)# 返回第一行和第二行
    print(df.loc[[0, 1]])

    结果:

       calories  duration
    0       420        50
    1       380        40

    如果索引名不是默认的从0开始的整数:

    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
    }df = pd.DataFrame(data, index = ["day1", "day2", "day3"])# 指定索引
    print(df.loc["day2"])
    • 按列名
    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]"others": [123, 22, 66]
    }df = pd.DataFrame(data)# 指定索引
    print(df[['calories','duration']])
    • 访问单个元素

    先列,后行

    print(df['Name'][0])

    先行,后列,表示所有的行,列名为'Column1'

    print(df.loc[:, 'Column1'])

    .loc[]和.iloc[]的区别

    .loc[]是按索引名

    .iloc[]是按位置

    import pandas as pddata = [
    ['amy','tony']
    ]df=pd.DataFrame(data, index=['girl','boy'], columns='name')#第一行
    print(df.loc['girl'])#第一行
    print(df.iloc[0])
    # 索引和切片
    print(df[['Name', 'Age']])  # 提取多列
    print(df[1:3])               # 切片行
    print(df.loc[:, 'Name'])     # 提取单列
    print(df.loc[1:2, ['Name', 'Age']])  # 标签索引提取指定行列
    print(df.iloc[:, 1:])        # 位置索引提取指定列

    DataFrame常用方法,与Seires类似

    head(n)返回 DataFrame 的前 n 行数据(默认前 5 行)
    tail(n)返回 DataFrame 的后 n 行数据(默认后 5 行)
    info()显示 DataFrame 的简要信息,包括列名、数据类型、非空值数量等
    describe()返回 DataFrame 数值列的统计信息,如均值、标准差、最小值等
    shape返回 DataFrame 的行数和列数(行数, 列数)
    columns返回 DataFrame 的所有列名
    index返回 DataFrame 的行索引
    dtypes返回每一列的数值数据类型
    sort_values(by,ascending)按照指定列排序,by=列名,ascending=True(升序) or False(降序)
    sort_index()按行索引排序
    dropna()删除含有缺失值(NaN)的行或列
    fillna(value)用指定的值填充缺失值
    isnull()判断缺失值,返回一个布尔值 DataFrame
    notnull()判断非缺失值,返回一个布尔值 DataFrame
    loc[]按标签索引选择数据
    iloc[]按位置索引选择数据
    at[]访问 DataFrame 中单个元素(比 loc[] 更高效)
    iat[]访问 DataFrame 中单个元素(比 iloc[] 更高效)
    apply(func)对 DataFrame 或 Series 应用一个函数
    applymap(func)对 DataFrame 的每个元素应用函数(仅对 DataFrame)
    groupby(by)分组操作,用于按某一列分组进行汇总统计
    pivot_table()创建透视表
    merge()合并多个 DataFrame(类似 SQL 的 JOIN 操作)
    concat()按行或按列连接多个 DataFrame
    to_csv()将 DataFrame 导出为 CSV 文件
    to_excel()将 DataFrame 导出为 Excel 文件
    to_json()将 DataFrame 导出为 JSON 格式
    to_sql()将 DataFrame 导出为 SQL 数据库
    query()使用 SQL 风格的语法查询 DataFrame
    duplicated()返回布尔值 DataFrame,指示每行是否是重复的
    drop_duplicates()删除重复的行
    set_index()设置 DataFrame 的索引
    reset_index()重置 DataFrame 的索引
    transpose()转置 DataFrame(行列交换)

    数据修改

    修改列数据:重新赋值

    df['Column1'] = [10, 11, 12]

    添加新列:给新列赋值

    df['NewColumn'] = [100, 200, 300]

    合并行/列

    pd.concat():pandas 内部的一个方便的函数,用于垂直(按行)或水平(按列)连接 DataFrame。

    • objs 参数是一个要串联的 Series 或 DataFrame 对象的序列或映射。

    • axis 参数决定连接的方向:

      • axis=0 设置为缺省值(默认),这意味着它将垂直(按行)连接 DataFrame。

      • axis=1 将水平连接 DataFrame(按列)。

    # 使用concat添加新行
    new_row = pd.DataFrame([[4, 7]], columns=['A', 'B'])  # 创建一个只包含新行的DataFrame
    df = pd.concat([df, new_row], ignore_index=True)  # 将新行添加到原始DataFrameprint(df)

    merge()

    pd.merge(df1, df2, on='Column1')

    分割

    pivot、melt


    删除

    删除列

    df_dropped = df.drop('Column1', axis=1)

    删除行

    df_dropped = df.drop(0)  # 删除索引为 0 的行

    删除重复行

    drop_duplicates(subset =, keep = 'first', inplace = False)

    drop_duplicates() 函数参数定义:

    • subset:此参数标识重复行时要考虑的列标签或标签序列。如果未提供,它将处理 DataFrame 中的所有列。

    • keep:此参数确定要保留的重复行。

      • 'first': (默认) 删除除第一个匹配项以外的重复项。

      • 'last': 删除除最后一个匹配项之外的重复项。

      • False: 删除所有重复项。

    • inplace: 如果设置为 True,则直接对对象进行更改,而不返回新的对象。如果设置为 False(默认),则返回丢弃重复的新对象。

    删除缺失值

    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    dropna 函数参数定义:

    • axis: 它可以是 {0 or 'index', 1 or 'columns'}。默认为 0。如果 axis=0,则丢弃包含缺失值的行;如果 axis=1,则丢弃包含缺失值的列。

    • how: 确定当我们至少有一个 NA 或全部 NA 时,是否从 DataFrame 中删除行或列。

      • how='any': 如果存在任何 NA 值,则删除该行或列(默认)。

      • how='all': 如果所有值都为 NA,则删除该行或列。

    • thresh: 需要多少非 NA 值。这是一个整型参数,需要最小数量的非 NA 值才能保留行/列。

    • subset: 要考虑的另一个轴上的标签,例如,如果您正在删除行,则这些标签将是要包括的列的列表。当您只想考虑某些列中的 NA 值时,这特别有用。

    • inplace: 这是一个布尔值,如果是 True,则对 DataFrame 本身进行更改。请记住,在使用 inplace=True 参数时,您修改的是原始的 DataFrame。如果出于任何原因需要保留原始数据,请避免使用 inplace=True,而是将结果赋给新的 DataFrame。


    列/索引重命名

    DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='raise')
    
    • mapper, index, columns:可以传递以重命名索引或列的词典。在我们的示例中,我们使用 columns。

    • axis: 可以是 "index" 或 "columns"。确定是重命名索引还是重命名列。默认情况下,如果您提供 columns 参数,您将重命名列。

    • copy: 如果设置为 True,则创建一个新的 DataFrame。如果为 False,则修改原始 DataFrame。

    • inplace: 如果设置为 True,则重命名会原地修改 DataFrame,不会返回任何内容。如果为 False,则在不修改原有 DataFrame 的情况下,返回一个新的带有更名列的 DataFrame。

    • level: 对于具有多级索引的 DataFrame,应当重命名标签的级别。

    • errors: 如果是 'raise',如果尝试重命名不存在的项,则会引发错误。如果设置为 'ignore',任何重命名项目的失败都将被忽略。

    我们关注'columns','index'参数就可以了

    import pandas as pdnewname={'id':'student_id','first':'first_name','last':'last_name','age':'age_in_years'}
    students.rename(columns=newname,inplace=True)

    改变数据类型

    DataFrame.astype(dtype, copy=True, errors='raise')
    • dtype: 它是一种数据类型,或列名->数据类型的字典。

    • copy: 默认情况下,astype 总是返回新分配的对象。如果 copy 设置为 False,则只有在旧对象无法强制转换为所需类型的情况下才会创建新对象。

    • errors: 控制对提供的数据类型的无效数据引发异常。默认设置为 raise,表示会引发异常。

    students = students.astype( {'grade':int})
    return students

    填充缺失值

    .fillna(value, method = None, axis, inplace)
    • value: 标量,字典,Series 或 DataFrame。用于填充空洞的值(例如 0)。这就是我们在解决方案中使用的。

    • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。用于填充重新索引 Series 中的空洞的方法。默认为 None。

    • axis: {0 or ‘index’, 1 or ‘columns’}。沿其填充缺失值的轴。

    • inplace: 布尔值。如果为True,则原地填充。注意:这将修改此对象上的任何其他视图。默认值为 False。

    由于这个函数无法制定列/行,所以如果想要对某一行/列填充缺失值,就要把fillna这个函数作用在这个列/行上

    products['quantity'].fillna(0,inplace=True)

    长、宽表格转换(透视)

    pivot 函数

    在 pandas 中 pivot 函数被用来基于列的值重塑数据并且在外部得到一个新的 DataFrame。pivot 采用我们将使用的以下参数:

    • index: 确定新 DataFrame 中的行。

    • columns: 确定新 DataFrame 中的列。

    • values: 指定重塑表格时要使用的值。

    举例:

    将上面的表转换为下面的表:

    weather.pivot(index='month',columns='city',values='temperature')

    melt 函数

     pandas 的 melt 函数用于转换或重塑数据。它将 DataFrame 从宽格式(列表示多个变量)更改为长格式(每行表示一个唯一变量)

    举例解释:

    • id_vars:这指定了应该保持不变的列。对于这个问题,只有 product 列保持不变,因为我们希望输出中的每一行都与一个产品相关联。

    • value_vars:这指定了我们想要“melt”或将其整形成行的列。在我们的示例中,以下是每个季度的销售数据列:quarter_1、quarter_2、quarter_3 和 quarter_4。

    • var_name:这是将存储来自 value_vars 的标头名称的新列的名称。在我们的问题中,这些是季度名称。

    • value_name:这是将存储 value_vars 中的值的新列的名称。在我们的问题中,这将是每个季度每种产品的销售数据。


    pandas的方法真的太多了,靠人脑子真的记不过来。不过虽然平时在处理数据的时候,我一般都是让AI编写程序,因为这种清洗、处理数据的活,AI可以做的非常好,思路明确,不用人绞尽脑汁思考先处理什么,再处理什么,效率嘎嘎高。不太确定学习到的这些方法,过两天还能不能记得住,但总归有些印象,真工作的时候,还让AI干。今晚在力扣上刷了一些pandas的题目,还是感觉到自己的思路被拓宽了(os:原来数据还能这么分析),这也是学习pandas的一些收获吧。一边学基本的方法,一边刷力扣,我觉得是非常有用的,可以看到学习的这些方法,都可以怎么去处理实际问题,所以边学边干,进步飞快~

    今晚周五同事们下班的都贼早,七点半的时候办公室就只有我一个人了(以往九点钟人都很多),+2不知道从哪里突然冒出来,吓了我一跳,催另一个同事下班,居然没催我下班,应该是看到我在学习pandas了。希望我不要被冠以卷王的名号(虽然我感觉在办公室已经有这个苗头了),没办法,我是苦逼实习生,白天实习,晚上秋招,时不时导师那边还要开组会,你们这些正式工就别和我卷了,真说卷,我也卷不过你们,你们晚上十点才下班的。。。。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/diannao/96418.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/diannao/96418.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    C++显示类型转换运算符static_cast使用指南

    这是一篇关于 static_cast 用法的文章。本文会从基础概念到常见应用场景全覆盖,并附上代码示例以方便理解。C 中的 static_cast 用法详解 在 C 中,static_cast 是一种显式类型转换运算符,主要用于在编译期进行类型安全的转换。相比 C 风格的强…

    es6常用方法来解决功能需求

    前言:es6常用方法来解决功能需求。1、出现复杂的json字符串如何去解析?比如:下面这个字符串,如果用json.parse解析发现还是个字符串"\"[{\\\"orgId\\\":\\\"1054021138280960\\\",\\\"orgName…

    龙虎榜——20250822

    上证指数今天继续创新高收中阳线,量能维持在5天均量线附近,目前均线多头强势的走势,小级别也未出现反转信号,上涨趋势不要轻易看空。深证指数今天延续强势的走势,大涨收光头光脚的阳线,目前均线多头排列&am…

    3维模型导入到3Dmax中的修改色彩简单用法----第二讲

    目录回顾1 补充信息*stp导出没有颜色怎么办?*2 3Dmax的使用如果颜色丢失了怎么办呢?怎么实现一零件上多个色彩呢?怎么将零件绑到一起呢?怎么将三角形的面变成光滑曲面呢?回顾 上一讲,我们简单的说了一下&a…

    智慧农业新基建:边缘计算网关在精准农业中的落地实践案例

    智慧农业新基建:边缘计算网关在精准农业中的落地实践案例传统农业生产中,水肥管理依赖经验判断,往往造成资源浪费和产量不稳定;同时,恶劣的自然环境也给农业生产带来诸多挑战。而蓝蜂边缘计算网关在精准农业中的应用&a…

    llm操控solidworks 画立方体 deepseek

    deepseek接入solidowrks画立方体用eval方法链接llm和solidworks pythonwin32接口 离好的效果还差一个有脑子会生成复杂命令序列的ai 参考 基于Python的Solidworks二次开发方法_selectbyray-CSDN博客 Welcome - 2025 - SOLIDWORKS API Help 仓库 llm_sw: llm链接solidworks…

    MySQL事务及原理详解

    MySQL 事务 事务是一组不可分割的操作集合,这些操作要么同时成功提交,要么同时失败回滚。 acid事物的四大特性 原子性 最小工作单元,要么同时成功,要么同时失败。 例如A转账300给B,A账户-300与B账户300必须满足操作原子性&#xf…

    Flutter上手记:为什么我的按钮能同时在iOS和Android上跳舞?[特殊字符][特殊字符]

    文章目录🔥 先解决灵魂拷问:凭啥选Flutter?🧱 解剖Flutter:它肚子里藏着什么黑科技?三层蛋糕架构 🎂状态管理?江湖门派大战! 🥋🛠 真实项目暴击&a…

    单片 、物联网、51单片机、软硬件之基于STM32与蓝牙的仓储管控系统的设计与实现/基于物联网的仓库管理系统

    单片 、物联网、51单片机、软硬件之基于STM32与蓝牙的仓储管控系统的设计与实现/基于物联网的仓库管理系统

    Product Hunt 每日热榜 | 2025-08-22

    1. Mocke 标语:模拟邮件营销:在不发起活动的情况下了解你的回复率 介绍:Mocke AI代理模拟运行电子邮件营销活动,并在一分钟内返回结果,包括邮件的打开率、回复率和退订率。它还会揭示每个潜在客户为何未打开邮件、报…

    基于Java+SpringBoot+Vue+HTML5电影评论网站系统(源码+LW+调试文档+讲解等)/电影评论/网站系统/电影/评论/网站/系统/影评网站/电影网站/评论系统/电影评论系统

    博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

    家用电器,让现代家庭生活更美好

    在现代家庭中,家用电器早已不再是冰冷的机器,而是成为了我们生活中不可或缺的一部分。它们以科技之名,融入我们的日常,让生活变得更加便捷、舒适和美好。 清晨,当第一缕阳光透过窗帘,智能咖啡机已经为您准备…

    RabbitMQ延时队列的两种实现方式

    目录 一、延时插件实现 1、版本要求 2、为运行新容器时安装 3、为已运行的容器安装 4、验证安装 5、代码编写 1. 配置类 2. 生产者 3. 消费者 二、死信队列实现 1、代码编写 1. 配置类 2. 生产者 3. 消费者 三、踩坑记录 1、发送消息失败 2、消息过期后未能转…

    深度学习在股票量化中的应用

    深度学习在股票量化中的具体应用:从时间序列预测到Alpha挖掘深度学习并非量化交易的银弹,但它是一套强大的工具集,能够解决传统量化方法难以处理的复杂问题。其核心价值在于从海量、高维、非结构化的数据中自动提取有效特征并发现非线性关系。…

    Web 安全之 HTTP 响应截断攻击详解

    这不是危言耸听。 在一次安全审计中,某电商平台发现: 用户访问首页后,自动跳转到了赌博网站。 但代码没被篡改,服务器没被入侵,日志一切正常。 最终追查发现—— 罪魁祸首,竟是一个 %0d%0a(回车…

    Envoy配置ext_proc

    介绍 本文将使用gateway api inference extension作为envoy的ext_proc服务端 启动Ext_Proc 基于Gateway API Inference Extension https://github.com/kubernetes-sigs/gateway-api-inference-extension.git 先clone代码到本地 git clone https://github.com/kubernetes-…

    echarts关系图(Vue3)

    基础版效果图&#xff1a;后期请求接口&#xff0c;接入数据即可用<template><div><v-chartref"vChartRef":option"option"style"width: 100%; height: 800px"></v-chart></div> </template><script lan…

    【LeetCode】17. 电话号码的字母组合

    文章目录17. 电话号码的字母组合题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析回溯法详解组合生成过程可视化数字映射关系各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点实际应用…

    全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions

    摘要 本文提出了一种在 NVIDIA 图形处理器&#xff08;GPU&#xff09;的张量核心&#xff08;Tensor Cores&#xff0c;仅含 FP16、INT8 等 GEMM 计算功能&#xff09;上实现 FP64&#xff08;双精度&#xff0c;DGEMM&#xff09;和 FP32&#xff08;单精度&#xff0c;SGEMM…

    Hexo 博客图片托管:告别本地存储,用 PicGo + GitHub 打造高速稳定图床

    之前刚开始进行Hexo博客撰写&#xff0c;图片都保存在本地Hexo源文件目录&#xff08;source/images/&#xff09;文件夹&#xff0c;随着图片增多&#xff0c;管理起来压力增大&#xff0c;于是产生了使用图床&#xff0c;引入外链进行图片存储的想法 Pros and Cons 提升部署…