数据处理与统计分析篇-day05-Pandas详解

news2024/11/13 11:44:24

创建DaraFrame对象

概述

  • DataFrame是一个表格型的==结构化==数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。

  • DataFrame是Pandas中的最基本的数据结构对象,简称df;可以认为df就是一个二维数据表,这个表有行有列有索引

  • DataFrame是Pandas中最基本的数据结构,Series的许多属性和方法在DataFrame中也一样适用.

创建方式

字典方式创建
# 定义字典, 记录: 数据
my_dict = {
    'id': [1, 2, 3],
    'name': ['张三', '李四', '王五'],
    'age': [23, 21, 25]
}
# 将字典 => DataFrame对象
df1 = pd.DataFrame(my_dict)
print(df1)
print(type(df1))  # <class 'pandas.core.frame.DataFrame'>

列表+元组方式创建
# 定义列表, 记录: 数据
my_list = [
    (1, '张三', 23),      # 列表内嵌套的(元组或列表)是一行数据
    (2, '李四', 1),
    (3, '王五', 25)
]
# 将列表 => DataFrame对象
# columns: 指定列的顺序
# index: 指定索引的值
df3 = pd.DataFrame(
    data=my_list,
    columns=['id', 'name', 'age'],
    index=['x', 'y', 'z']
)
print(df3)
print(type(df3))  # <class 'pandas.core.frame.DataFrame'>

index与columns属性
# 定义字典, 记录: 数据
my_dict = {
    'id': [1, 2, 3],
    'name': ['张三', '李四', '王五'],
    'age': [23, 21, 25]
}
# 将字典 => DataFrame对象
# columns: 指定列的顺序
# index: 指定索引的值
df2 = pd.DataFrame(
    data=my_dict,
    columns=['name', 'id', 'age'],
    index=['x', 'y', 'z']
)
print(df2)
print(type(df2))  # <class 'pandas.core.frame.DataFrame'>

属性

# 读取文件, 获取df对象
df = pd.read_csv('data/scientists.csv')
df
​
print(df.shape)         # 维度(8, 5)
print(df.size)          # 元素个数
print(df.values)        # df对象 => ndarray
print(type(df.values))  # <class 'numpy.ndarray'>
print(df.dtypes)        # 各列元素的类型
print(df.ndim)          # 维度, 2
print(df.index)         # 获取所有的索引列(的值)
print(df.columns)       # 列名

函数

print(len(df))                  # 8, 行数
print(df.head())                # 默认前5行
print(df.head(n=2))             # 前2行
print(df.tail())                # 默认最后5行
print(df.tail(n=2))             # 后2行
​
df.info()                                   # 查看详细信息
print(df.describe())                        # 查看格列的统计信息(默认只查看数值列)
print(df.describe(include='all'))           # 查看格列的统计信息(查看所有列)
print(df.describe(include=['int', 'float']))# 查看整型和浮点型
​
print(df.count())       # 查看各列非空值
print(df.max())         # 查看各列最大值
print(df.min())         # 查看各列最小值
​
# print(df.mean())    # 报错, 只针对2020版conda环境有效(平均)
print(df.Age.mean())

布尔索引

# 过滤出df对象中, Age列大于平均年龄的行
# df[Age列 > Age列的平均值]
print(df.Age.mean())
# df[df.Age > df.Age.mean()]  # df对象的布尔值操作
df.Age[df.Age > df.Age.mean()]  # Series对象的布尔值操作
​
# 过滤出前5行中的, 第1, 3, 4行 => 索引:0, 2, 3
df.head()[[True, False, True, True, False]]     # 传入的是布尔列表

计算

# 场景1: df和数值计算(数值会和df对象的每个元素计算)
df * 2
​
# 场景2: df和df对象计算(优先参考索引)
df + df
​
df[:4]  # 类似切片, 获取前4行
df + df[:4]

索引和列名相关操作

设置和取消索引列

Pandas中99%关于DF和Series调整的API, 都会默认在副本上进行修改, 调用修改的方法后, 会把这个副本返回

这类API都有一个共同的参数: inplace, 默认值是False

如果把inplace的值改为True, 就会直接修改原来的数据, 此时这个方法就没有返回值了

# 在pandas中, 某个函数如果有 inplace参数, 则该函数大概率 是默认返回新的副本, 把该参数设置为true, 则在原始对象中修改
# 1. 演示读完设置索引列
movie = pd.read_csv('data/movie.csv')
movie.head()
​
# 设置 movie_title为索引列(分步)
movie.set_index('movie_title')              # 默认返回新的副本
movie.head()        
​
new_movie = movie.set_index('movie_title')  # 默认返回新的副本
new_movie.head()        
​
movie.set_index('movie_title', inplace=True)  # 在原始对象中修改
movie.head()    # 多次运行会报错 "None of ['movie_title'] are in the columns"
​
# 2. 演示读时设置索引列
movie = pd.read_csv('data/movie.csv', index_col='movie_title')
movie.head()
​
# 3. 重置索引列
movie.reset_index(inplace=True)
movie.head()

修改列名和行名

rename()
df = pd.read_csv('data/movie.csv', index_col='movie_title')
df.head()
​
# 手动设置行名(索引列) 和 列名
idx_name = {'Avatar':'阿凡达', "Pirates of the Caribbean: At World's End":'加勒比'}
col_name = {'color':'颜色', 'director_name':'导演名'}
​
# 通过rename函数, 修改行名和列名
df.rename(index=idx_name, columns=col_name, inplace=True)
df.head()
index和columns属性
df = pd.read_csv('data/movie.csv', index_col='movie_title')
df.head()
​
# 获取所有行名 和 列名
idx_list = df.index.to_list()
col_list = df.columns.to_list()
​
# 修改行名和列名
# 索引列
idx_list[0] = '阿凡达'
idx_list[1] = '加勒比'
# 列名
col_list[0] = '颜色'
col_list[1] = '导演名' 
​
# 把修改后的行名和列名设置为新的索引列 和 列名
df.index = idx_list
df.columns = col_list
​
df.head()

添加列

末尾添加
# df = pd.read_csv('data/movie.csv', index_col='movie_title')
df = pd.read_csv('data/movie.csv')
df.head()
#%%
# 1. 添加列: df对象[列名] = 值
df['has_seen'] = 1
# 总点赞数 = 导演点赞数 + 演员的点赞数
df['daafl'] = df['director_facebook_likes'] + df['actor_1_facebook_likes'] + df['actor_2_facebook_likes']
df.head()
指定位置插入
# 在索引为1的位置, 插入1列, 总利润 = 总收入 - 总预算
# insert()函数在原对象中修改
df.insert(loc=1, column='profix', value=df['gross'] - df['budget'])
df.head()

删除列

# df.drop('has_seen', inplace=True, axis='columns')
​
df.head().drop([0, 1])      # [索引值列表]

进阶-获取指定的数据

导出

# 细节: 如果使用Excel文件, 记得先装3个包, xlwt, openyxl, xlrd
​
# 1. 读取文件, 获取df对象.
df = pd.read_csv('data/scientists.csv')
df
#%%
# 2. 演示导出数据到文件中.  
# 要求: 导出文件到 当前项目下的 output 文件夹下.   
# 导出的格式: df.to_文件格式()
​
# 前提: output文件夹必须存在.
df.to_pickle('output/scientists.pickle')        # pickle文件 一般用于存储 pandas的 中间结果. 
df.to_csv('output/scientists.csv')              # 细节: 索引列也会导出
df.to_csv('output/scientists_noindex.csv', index=False)   # 细节: 不导出索引列
df.to_csv('output/scientists_noindex.tsv', index=False, sep='\t')   # sep: 分隔符
​
df.to_excel('output/scientists.xlsx')
df.to_excel('output/scientists_noindex.xlsx', index=False, sheet_name='ai21')
print('导出成功!')

导入

# 1. 读取文件, 获取df对象
# df = pd.read_pickle('output/scientists.pickle')
 
# df = pd.read_csv('output/scientists.csv')
# df = pd.read_csv('output/scientists_noindex.csv')
# df = pd.read_csv('output/scientists_noindex.tsv', sep='\t') # 读取tsv的时候, 指定分隔符
​
# df = pd.read_excel('output/scientists.xlsx')
​
# 如果不写表名, 则默认读取第1个表, 如果写了, 则读取指定的表. 可以是一张表, 也可以是多张表.
# 1张表的情况下, 返回的是: df对象.
# 多张表的情况下, 返回的是: 字典, 即: 表名做键, 该表的df对象做值.
df = pd.read_excel('output/scientists_noindex.xlsx', sheet_name=['pandas_dara', 'Sheet1'])
​
#%%
# 2. 查看结果
df          # 字典
df['Sheet1']  # df对象

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

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

相关文章

51单片机-DA(数字转模拟)

作者&#xff1a;Whappy 个人理解&#xff1a;将电压或电流信号进行等分或不等分&#xff08;高电平的电压范围和低电平的范围&#xff0c;如0-5v&#xff0c;0-1.8位低电平&#xff0c;3.8-5v为高电平&#xff09;&#xff0c;同样也是通过采样&#xff0c;量化等操作将不连续…

工业仪器仪表指针数据集

工业仪器仪表指针数据集: 可用于仪表指针识别、分割项目 分别含有1000张原图和标签 图片中有各类工业仪器表盘&#xff0c;指针。 工业仪器仪表指针数据集介绍 数据集名称 工业仪器仪表指针数据集&#xff08;Industrial Instrument Needle Dataset&#xff09; 数据集概述 …

Introduction to LLMs in Python

1、The Large Language Models (LLMs) Landscape 1.1、Introducing large language models 1.1.1、LLMs development lifecycle 1.1.2、Pre-training and fine-tuning We can often use a pre-trained LLM as a foundation and fine-tune it with our specific data, saving …

【笔记】2.1 半导体三极管(BJT,Bipolar Junction Transistor)

一、结构和符号 1. 三极管结构 常用的三极管的结构有硅平面管和锗合金管两种类型。各有PNP型和NPN型两种结构。 左图是NPN型硅平面三极管,右图是PNP型锗合金三极管。 从图中可见平面型三极管是先在一块大的金属板上注入杂质使之变成N型,然后再在中间注入杂质使之变成P型,…

从零开始讲DDR(2)——DDR的核心技术

我们知道DDR区分于之前的SDRAM最大的点就在于它可以做到“在时钟周期的上升沿和下降沿都能传输数据&#xff0c;这样它的传输速率就比SDRAM快了一倍”。其实要做到这点&#xff0c;背后需要的技术突破体现在很多层面&#xff1a; 一、双边沿触发技术&#xff08;Double Data Ra…

DPDK 简易应用开发之路 2:UDP数据包发送及实现

本机环境为 Ubuntu20.04 &#xff0c;dpdk-stable-20.11.10 发送数据包的通用步骤 初始化DPDK环境&#xff1a; 调用 rte_eal_init() 来初始化DPDK的EAL&#xff08;环境抽象层&#xff09;&#xff0c;这是所有DPDK应用程序的第一步&#xff0c;用于初始化硬件、内存和逻辑核…

希尔排序(ShellSort)详解

希尔排序的底层是插入排序&#xff0c; 不了解插入排序的友友可以先看我下面这篇文章&#xff1a; 插入排序详解-CSDN博客 思路 就整体而言&#xff0c;希尔排序不过是多用了几次插入排序&#xff0c; 预排序→插入排序&#xff0c; 预排序的作用是让数组元素更接近于有序…

FreeRtos中Task函数详解

前言&#xff1a;本篇笔记参考韦东山老师&#xff0c;B站视频链接放在最后。 Task任务基本概念 在使用FreeRtos的程序中&#xff0c;可以创建多个Task来完成程序功能&#xff0c;Task是轻量级的独立执行单元&#xff0c;被FreeRtos的调度器管理&#xff0c;每个任务有着自己的…

从零开始手搓Transformer#Datawhale组队学习Task1#

从零开始手搓Transformer 目录 缩放点积注意力DotProductAttention 多头注意力Multi-Head Attention 位置编码Position Encoder 前馈神经网络FFN 残差连接和层归一化&#xff08;Add&Norm&#xff09; 编码器Encoder 解码器Decoder 编码器-解码器Encoder-Decoder …

pg入门3—详解tablespaces2

pg默认的tablespace的location为空&#xff0c;那么如果表设置了默认的tablespace&#xff0c;数据实际上是存哪个目录的呢? 在 PostgreSQL 中&#xff0c;如果你创建了一个表并且没有显式指定表空间&#xff08;tablespace&#xff09;&#xff0c;或者表空间的 location 为…

ISSTA 2024盛大开幕:中国学者的录取数和投稿量均位列第一

随着夏日的尾声&#xff0c;全球软件测试领域的专家和学者齐聚在奥地利维也纳。共同参与这场科技盛宴——ISSTA 2024。这场国际会议正如火如荼地进行中&#xff0c;吸引了来自世界各地的专业人士参与。 会议实况&#xff1a; 9月16日与17日&#xff0c;大会安排了丰富的社交活…

Qt:懒汉单例(附带单例使用和内存管理)

前言 本文主要写懒汉单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 以下是两种懒汉单例的写法 1. 懒汉式单例&#xff08;多线程不安全&#xff0c;但是在单线程里面是安全的&…

【828华为云征文|华为云Flexus X实例部署指南:轻松搭建可道云KODBOX项目】

文章目录 华为云 Flexus X 实例&#xff1a;引领高效云服务的新时代部署【可道云KODBOX】项目准备工作具体操作指南服务器环境确认宝塔软件商店操作域名解析可道云KODBOX登录页效果验证 总结 华为云 Flexus X 实例&#xff1a;引领高效云服务的新时代 在云计算领域&#xff0c…

【UE5】使用2DFlipbook图作为体积纹理,实现实时绘制体积纹理【第一篇】

这是一篇对“Creating a Volumetric Ray Marcher-Shader Bits”的学习心得 文章时间很早&#xff0c;因此这里针对UE5对原文做出兼容性修正&#xff08;为避免累赘不做出注明。链接如上&#xff0c;有需要自行学习&#xff09; 以及最后对Custom做可能的蓝图移植&#xff0c;做…

虚拟机与物理机的文件共享

之前往虚拟机里传文件都是直接拖拽或者借助工具上传&#xff0c;都不太方便&#xff0c;倘若物理机的文件直接能在虚拟机里读取使用&#xff0c;那多好啊~ 1 虚拟机设置 注意文件夹名称不要中文/空格 2 验证Kali下分享文件夹功能是否启用 vmware-hgfsclient 3 创建挂载目录…

【踩坑】utools黑框和chrome白屏

记录一下bug&#xff0c;后面找到解决方案再同步 刚开机会黑框&#xff0c;但是输入wx能正常打开&#xff0c;功能一切正常 过一段时间会恢复正常 chrome会白屏 过一段时间恢复正常&#xff0c;大概是utools恢复正常时间的三倍 猜测是前两天关机时提示xx应用阻止关机&#…

旷视轻量化网络shufflenet算法解读

目录 预备知识 1. 回顾MobileNet V1的核心思想---深度可分离卷积 2.ShuffleNet主要有两个创新点 2.1 分组卷积与11分组卷积 2.2 channel Shuffle&#xff08;通道重排&#xff09; 2.3 通道重排过程 3. ShuffleNet网络结构 3.1 ShuffleNet unit 3.2 不同分组数的Shu…

Mamba YOLO World

论文地址&#xff1a;https://arxiv.org/pdf/2409.08513v1 代码地址&#xff1a; GitHub - Xuan-World/Mamba-YOLO-World: Mamba-YOLO-World: Marrying YOLO-World with Mamba for Open-Vocabulary Detection 开集检测&#xff08;OVD&#xff09;旨在检测预定义类别之外的物体…

上海做网站公司发展分析报告

上海网站公司发展分析报告 一、行业概况 上海作为中国的经济、金融和科技中心&#xff0c;其网站开发行业在近年来迅速发展。根据统计数据&#xff0c;当地的网站公司数量逐年增加&#xff0c;涵盖了企业网站、电子商务平台、移动应用开发等多个领域。随着互联网技术不断演进&…

维钧团队与广东能源集团携手共创未来

2024 年 9 月 19日&#xff0c;能源与投资领域传出一则令人振奋的消息——多元化投资团队维钧团队与广东能源集团正式达成合作&#xff0c;如同璀璨星辰交汇&#xff0c;开启了双方共同发展的壮丽新篇章。 维钧团队&#xff0c;以其敏锐专业的投资眼光、灵活多元的投资策略和卓…