基础Python教程之pandas使用总结

news2024/11/17 17:26:34

Pandas 简介

Pandas 库是机器学习四个基础库之一, 它有着强大的数据分析能力和处理工具。它支持数据增、删、改、查;支持时间序列分析功能;支持灵活处理缺失数据;具有丰富的数据处理函数;具有快速、灵活、富有表现力的数据结构:DataFrame 数据框和 Series 系列。

官方文档:API reference — pandas 2.1.1 documentation

Pandas 读取与存储数据

1、csv文件读取

read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, dtype=None, engine=None, nrows=None)

参数名称说明
filepath接收 string。代表文件路径。无默认。
sep接收 string。代表分隔符。read_csv 默认为' , ',read_table 默认为制表符 '[Tab]'。
header接收 int 或 sequence。表示将某行数据作为列名。默认为 infer,表示自动识别。
names接收 array。表示列名。默认为 None。
index_col接收 int、sequence 或 False。表示索引列的位置,取值为 sequence 则代表多重索引。默认为 None。
dtype接收 dict。代表写入的数据类型(key:列名,values:数据格式)。默认为 None。
engine接收 C 或者 Python。代表数据解析引擎。默认为 C。
  • sep 参数是指定文本的分隔符,如果分隔符指定错误,在读取数据的时候,每一行数据将连城一片。
  • header 参数是用来指定列名,如果是 None 则会添加一个默认的列名。
  • encoding 代表文件的编码格式,常用的编码有 utf-8、utf-16、gbk、gb18030、big5 等。如果编码指定错误,数据将无法读取,Ipython 解释器会报解析错误。
import numpy as np
import pandas as pd

df = []

df = pd.read_csv(file, dtype='str')  # 所有数据转为字符串
df = df.replace(np.nan, '')  # 空数据转为空字符串

print(df)

2、excel文件读取

pandas.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)

参数名称说明
io接收 string。代表文件路径。无默认。
sheet_name接收 string 或 int。代表 excel 表内数据的分表位置。默认为0。
header接收 int 或 sequence。表示将某行数据作为列名。默认为 infer,表示自动识别。
names接收 int、sequence 或 False。表示索引列的位置,取值为 sequence 则代表多重索引。默认为 None。
index_col接收 int、sequence 或 False。表示索引列的位置,取值为 sequence 则代表多重索引。默认为 None。
dtype接收 dict。代表写入的数据类型(列名为 key,数据格式为 values)。默认为 None。
import pandas as pd
import numpy as np

df = []

ws = pd.ExcelFile(file)
sheets = ws.sheet_names
print(sheets)
for sheet in sheets:
    tem_df = pd.read_excel(file, sheet_name=sheet, dtype='str')
    tem_df = tem_df.replace(np.nan, '')

    if len(df) == 0:
        df = tem_df
    else:
        df = pd.concat([df, tem_df])

print(df)

3、储存数据

dict数据存储

result = {
 'A': [1.0,2.2,3,4], 
 'B': [7,8,9,0], 
 'C': [1,2,3,4], 
 'D': [3,5,7,9]
}


df = pd.DataFrame.from_dict(result)

# 输出csv
df.to_csv(out_file_csv, index=False)
# 输出excel
df.to_excel(out_file_excel, index=False)

多维数据存储

result = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
columns_result = ['A', 'B', 'C', 'D']


df = pd.DataFrame(result, columns=columns_result)

# 输出csv
df.to_csv(out_file_csv, index=False)
# 输出excel
df.to_excel(out_file_excel, index=False)

excel存储限制,单sheet页只能存100万条数据

    result = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
    columns_result = ['A', 'B', 'C', 'D']
    
    # 输出excel
    writer = pd.ExcelWriter(out_file)
    result_df = pd.DataFrame(result, columns=columns_result)
    page_size = 500000
    page_num = math.ceil(len(result_df) / page_size)
    for i in range(page_num):
        s_idx = i * page_size
        e_idx = (i + 1) * page_size if (i + 1) * page_size < len(result_df) else len(result_df)
        tmp_df = result_df[s_idx:e_idx]
        tmp_df.to_excel(writer, sheet_name="Sheet{}".format(i + 1), index=False)
    writer._save()

Pandas增删改查操作

1、访问数据框中的元素

  • 对某一列的某几行访问:访问 DataFrame 中的某一列的某几行时,单独一列的 DataFrame 可以视为一个 Series,而访问一个 Series 和访问一个一维的 ndarray 基本相同。
  • 对多列数据访问:访问 DataFrame 多列数据可以将多个列索引名称视为一个列表,同时访问 DataFrame 多列数据中的多行数据和访问单列数据的多行数据方法基本相同。
  • 对某几行访问:head 和 tail 函数可以得到多行数据,但是用这两种方法得到的数据都是从开始或末尾获取的连续数据。默认参数为访问五行。
import pandas as pd 

d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, columns=['A', 'B', 'C', 'D'])
print(df)

print(df['A'])                       # 单列数据访问
print(df[['A', 'C']])                # 多列数据访问

print(df.head(3))                    # 访问前三行数据
print(df.tail(3))                    # 访问后三行数据

print(df[0:4])                    # 访问前三行数据
print(df[:-4])                    # 访问后三行数据

loc、iloc 方法

DataFrame.loc[行索引名称,列索引名称],如果传入的不是索引名称,那么切片操作将无法执行。

DataFrame.iloc[行索引位置,列索引位置],如果传入的不是索引位置,那么切片操作将无法执行。

loc 方法的代码灵活多变,代码的可读性更高;iloc 方法的代码简洁,但可读性不高。

使用 loc、iloc 方法访问查看 DataFrame 中的数据:

  • 使用 loc、iloc 方法实现多列切片,其原理是将多列的列名或者位置作为一个列表或者数据传入。
  • 使用 loc、iloc 方法可以取出 DataFrame 中的任意数据。
  • 在使用 loc 方法的时候内部传入的行索引名称如果为一个区间,则前后均为闭区间。其内部还可以传入表达式,结果会返回满足表达式的所有值。
  • 在使用 loc 方法的时候内部传入的行索引位置或列索引位置为区间时,则为前闭后开区间。
  • 使用 loc 方法能够实现所有单层索引切片操作。

# 按照行列顺序进行数据访问
print(df.iloc[0, 0])                 # 取出第一行第一列的数据
print(df.iloc[0:3, 0])               # 取出前三行第一列的数据
print(df.iloc[:, 0])                 # 取出第一列的数据
print(df.iloc[0, :])                 # 取出第一行的数据
print(df.iloc[1:3, 1:3])

# 按照行列名称进行数据访问
print(df.loc['a', 'A'])               # a行,A列
print(df.loc['a':'c', 'A'])           # a到c行,A列
print(df.loc[:, 'A'])                 # 访问第A列的元素
print(df.loc['a', :])                 # 访问第a行的元素
print(df.loc[['b','c'], ['B', 'C']])

# 注意如下方式返回值的区别
print(df.iloc[:, 0])                  # 返回的是 Series
print(df.iloc[:, 0:1])                # 返回的是 DataFrame

print(type(df.iloc[:, 0])) 
print(type(df.iloc[:, 0:1]))
df.iloc[:, 0:1]

循环查询,使用 iterrows() 方法循环遍历行

import pandas as pd

# 创建数据帧
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 使用 iterrows() 方法遍历行
for index, row in df.iterrows():
    print(index, row['A'], row['B'])

2、修改数据框中的元素

更改 DataFrame 中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。需要注意的是,数据更改直接针对 DataFrame 原数据更改,操作无法撤销。所以在做出更改前最好对数据进行备份。

DataFrame.loc[行索引名称,行索引名称] = new_value

d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, columns=['A', 'B', 'C', 'D'])
print(df)
df.loc['a', 'A'] = 101          # 对某个元素进行修改
df.loc[:, 'B'] = 0.25           # 对某一列进行修改
df.loc[:, 'C'] = [1, 2, 3, 4]   # 将某一列元素改成不同的值
print(df)

3、删除数据框中的元素

使用 drop 方法删除 Series 的元素或 DataFrame 的某一行(列)。

DataFrame.drop(labels=None, axis=0, levels=None, inplace=False)

参数名称说明
labels接收 string 或 array。代表删除的行或列的标签。无默认。
axis接收0或1。代表操作的轴向。默认为0。
levels接收 int 或者索引名。代表标签所在级别。默认为 None。
inplace接收 boolean。代表操作是否对原数据生效。默认为 False。

d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C', 'D'])
print(df)
print(df.drop('D', axis=1, inplace=False))    # 删除数据框的列元素
print(df.drop(['a', 'c'], axis=0))            # 删除数据框的行元素

Pandas转换与处理时间序列数据

1、将字符串转换为日期类型

# 将各种日期字符串转换成日期格式
import pandas as pd
data = ['12Feb23', '20201225', '2022/12/25', '2018.7.12']
columns = ['日期']
df = pd.DataFrame(data = data, columns = columns)
df['转换后'] = pd.to_datetime(df['日期'])
print(df)

2、日期类型转时间戳

import pandas as pd

data = {'date': ['2022-10-29', '2022-10-30', '2022-10-31'], 'value': [1, 2, 3]}
df = pd.DataFrame(data)

# 先将日期列转换成datetime格式
df['date'] = pd.to_datetime(df['date'])

# 再将datetime格式转换成timestamp
df['timestamp'] = df['date'].apply(lambda x: int(x.timestamp()))

print(df)

3、使用dt对象获取datetime数据类型的特定信息

# dt 对象的使用
import pandas as pd
df = pd.read_excel('datetime.xlsx')
df['日期'] = pd.to_datetime(df['原日期'])
df['年'] = df['日期'].dt.year
df['月'] = df['日期'].dt.month
df['日'] = df['日期'].dt.day
df['星期几'] = df['日期'].dt.day_name()
df['是否年底'] = df['日期'].dt.is_year_end

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

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

相关文章

上新啦!请查收云原生虚拟数仓 PieCloudDB 十月动态

PieCloudDB Database 最新动态 PieCloudDB 压缩效率得到提升 为了节省存储空间&#xff0c;降低用户存储费用&#xff0c;PieCloudDB 在压缩率上不断优化&#xff0c;包括&#xff1a; 对 HLL&#xff08;HyperLogLog&#xff09;支持游程编码&#xff08;Run Length Encodi…

Oracle数据库----第七周实验____循环与游标

目录 Oracle数据库----第七周实验 循环与游标 Oracle数据库----第七周实验 循环与游标 循环与游标  循环  首先设置显示输出结果Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 Connected as systemORCL SQL> set serveroutput on; 1.简单…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

【C语言进阶(14)】程序的编译与链接

文章目录 前言Ⅰ 程序的翻译环境1. 编译的过程2. 链接的过程 Ⅱ 程序的执行环境Ⅲ 预定义符号Ⅳ 预处理指令 #define1. #define 定义标识符2. #define 定义宏3. #define 替换规则 Ⅴ 预处理操作符 # 和1. # 操作符2. ## 操作符 Ⅵ 宏和函数的对比Ⅶ 预处理指令 #undefⅧ 条件编…

1.5状态压缩DP

1.小国王 在 n n nn nn的棋盘上放 k k k个国王&#xff0c;国王可攻击相邻的 8 8 8个格子&#xff0c;求使它们无法互相攻击的方案总数。 输入格式 共一行&#xff0c;包含两个整数 n n n和 k k k。 输出格式 共一行&#xff0c;表示方案总数&#xff0c;若不能够放置则输出…

RHEL 8.6 Kubespray 1.23.0 install kubernetes v1.27.5

文章目录 1. 预备条件2. download01 节点 安装 dockerdownload01 节点 介质下载下载 bastion01节点配置 yum 源bastion01 节点安装 docker5. 安装 docker insecure registrybastion01 部署 nginx 与 镜像入库13.1 配置 config.sh13.2 配置 setup-docker.sh13.3 配置 start-ngin…

18-spring 事务

文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事…

控制器连接Profinet转Modbus RTU网关与精密数显温控仪通讯配置案例

Profinet是一种用于工业自动化领域的通信协议&#xff0c;而Modbus RTU则是一种常见的串行通信协议。由于生产现场中的控制器与精密数显温控仪通常采用不同的通信协议&#xff0c;因此需要借助Profinet转Modbus RTU网关&#xff08;XD-MDPN100&#xff09;完成通信的桥接与转换…

SystemVerilog学习(1)——验证导论

写在最前 选课不慎&#xff0c;选修课选了个SystemVerilog&#xff0c;事情比必修还多&#xff0c;上课老师讲的一点用没有&#xff0c;但是学分还得修&#xff0c;只能自学了&#xff0c;既来之则安之。 一、什么是SystemVerilog SystemVerilog简称为SV语言&#xff0c;是一种…

攻防世界web篇-get_post

打开给出的地址 将浏览器上的地址http://61.147.171.105:58937/改为http://61.147.171.105:58937/?a1 输入?a1是完成了第一步&#xff0c;get请求&#xff0c;接下来要完成post的请求 这里&#xff0c;我使用的backbar quantum插件 得出flag值

【剑指Offer】32.从上往下打印二叉树

题目 不分行从上往下打印出二叉树的每个节点&#xff0c;同层节点从左至右打印。例如输入{8,6,10,#,#,2,1}&#xff0c;如以下图中的示例二叉树&#xff0c;则依次打印8,6,10,2,1(空节点不打印&#xff0c;跳过)&#xff0c;请你将打印的结果存放到一个数组里面&#xff0c;返…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;因为它就像是先知一般&#xff0c;可以预见未来&#xff0c;在 t 时刻就预见 t 到 n时刻之间的累计奖励的期望。假如我们有 Q ⋆ Q…

【关于FPGA内部die到pin的延时数据,即pin delay获取方法】

首先&#xff0c;本文只介绍Xilinx的&#xff0c;Alteral的以后。。 第一&#xff0c;生成平台 Xilinx目前在用的是ISE,和Vivado&#xff1b;二者之间并不是可以互相替代的&#xff0c;或者说这两者不完全是迭代的关系。 第二&#xff0c;先介绍常用的–VIVADO 这里又有几种…

Linux系统之passwd命令的基本使用

Linux系统之passwd命令的基本使用 一、passwd命令介绍1.1 passwd命令简介1.2 passwd命令起源 二、passwd命令的使用帮助2.1 passwd命令的help帮助信息2.2 passwd命令的语法解释 三、查看passwd相关文件3.1 查看用户相关文件3.2 查看组相关文件 四、passwd命令的基本使用4.1 设置…

mysql MVC jsp实现表分页

mysql是轻量级数据库 在三层架构中实现简单的分页 在数据库sql编程中需要编写sql语句 SELECT * FROM sys.student limit 5,5; limit x,y x是开始节点&#xff0c;y是开始节点后的需要显示的长度。 在jdbc编程中需要给出x和y 一般是页数*页码&#xff0c;显示的长度。 代…

谷歌云:下一代开发者和企业解决方案的强力竞争者

自从2018年Oracle前研发总裁Thomas Kurian加入谷歌云&#xff08;Google Cloud&#xff09;并出任谷歌云CEO以来&#xff0c;业界对于谷歌云的发展就十分好奇。而谷歌云的前任CEO Diane Greene曾是VMware的创始人之一&#xff0c;那么两任企业级技术和解决方案出身的CEO&#x…

windows上下载github上的linux内核项目遇到的问题

问题一&#xff1a;clone的时候报错 Cloning into G:\github\linux... POST git-upload-pack (gzip 27925 to 14032 bytes) remote: Counting objects: 6012062, done. remote: Compressing objects: 100% (1031/1031), done. remote: Total 6012062 (delta 893), reused 342 (…

Android推送问题排查

针对MobPush智能推送服务在使用过程中可能出现的问题&#xff0c;本文为各位开发者们带来了针对MobPush安卓端推送问题的解决办法。 TCP在线推送排查 排查TCP在线收不到推送时&#xff0c;我们先通过客户端的RegistrationId接口获取设备的唯一标识 示例&#xff1a; MobPush…

【Reinforcement Learning】Ubuntu中mujoco210 mujoco_py D4RL安装及错误解决

Ubuntu中mujoco210 mujoco_py D4RL安装及错误解决 本文根据一篇知乎文章链接在此进行配置&#xff0c;记录在配置过程中遇到的一些问题&#xff0c;原文作者的教程很详细&#xff0c;在此对原作者表示感谢&#xff5e; 直接进行知乎原文的第2.2 有效安装过程(避坑) 2.注意上…

行业领先的三个企业正在利用聊天机器人变得更强

聊天机器人已成为客户服务领域的革命者&#xff0c;深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互&#xff0c;提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力&#xff0c;聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…