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

Python数据分析NumPy和pandas(十五、pandas 数据加载、存储和文件格式)

大多数时候,我们要处理分析的数据是存储在不同格式的文件中的,有txt、csv、excel、json、xml以及二进制等磁盘文件格式,还有时候是从数据库以及从Web API中交互获取要处理的数据。现在开始学习如何用pandas从以上内容中输入和输出数据。

读取和写入文本格式数据

pandas具有许多函数,用于将表格数据作为DataFrame对象读取。下面列表列出来一些常用的函数,pandas.read_csv 是最常用的方法之一。这一次主要学习从各种格式的文本文件中存取数据,后面还要学习从二进制数据格式文件中存取数据。

以下列表:pandas 中的文本和二进制数据加载函数

函数描述
read_csv从文件、URL 或类似文件的对象加载分隔数据;使用逗号作为默认分隔符
read_fwf以固定宽度的列格式读取数据(即无分隔符)
read_clipboard从剪贴板读取数据的read_csv函数的变体;用于从网页转换表格
read_excel从 Excel XLS 或 XLSX 文件中读取表格数据
read_hdf读取 pandas 写入的 HDF5 文件
read_html读取给定 HTML 文档中找到的所有表格数据
read_json从 JSON 字符串表示形式、文件、URL 或类似文件的对象中读取数据
read_feather读取 Feather 二进制文件格式
read_orc读取 Apache ORC 二进制文件格式
read_parquet读取 Apache Parquet 二进制文件格式
read_pickle读取 pandas 存储的Python pickle 格式对象
read_sas读取SAS 数据集;由 SAS 系统的自定义存储格式之一存储
read_spss读取 SPSS 创建的数据文件
read_sql读取 SQL 查询的结果(使用 SQLAlchemy)
read_sql_table读取整个 SQL 表(使用 SQLAlchemy);等效于使用 read_sql 选择该表中所有内容的查询
read_stata从 Stata 文件格式读取数据集
read_xml从 XML 文件中读取数据表

这些函数旨在将文本数据转换为 DataFrame,我们先大概了解下这些函数的作用机制。这些函数的可选参数可能分为几类:

Indexing(索引):

可以将一个或多个列视为返回的 DataFrame,以及是否从文件中获取列名等。

Type inference and data conversion(类型推断和数据转换):

包括用户自定义的值转换和缺失值标记的自定义列表等。

Date and time parsing(日期和时间解析)

包括组合功能,可以将分布在多个列中的日期和时间信息合并到结果中的单个列中。

Iterating(迭代):

支持迭代非常大的文件(块)。

Unclean data issues(脏数据问题):

跳过行数据,如页脚、注释或类似于用逗号分隔的千位数字数据的其他小内容数据。

由于现实世界中的数据可能非常混乱,因此随着时间的推移,为了处理这些数据,一些数据加载函数(尤其是 pandas.read_csv)已经积累了一长串可选参数。一开始对这些参数不知所措是正常的(pandas.read_csv 大约有 50 个)。在线 pandas 官方文档有许多关于这些参数工作原理的示例,我们可以找到一个足够相似的示例来帮助我们正确的使用参数。

因为有些文件的 column 数据类型不是数据格式的一部分,所以一些函数提供了类型推理功能。这意味着我们不必指定哪些列是数字、整数、布尔值或字符串。另外有一些数据格式(如 HDF5、ORC 和 Parquet)在格式中嵌入了数据类型信息。

对于处理日期和其他自定义类型,我们可能需要应用更多的其他一些处理方法。


下面我将从读取处理一个小的逗号分隔值 的(CSV) 文本文件开始学习,这个文件名是ex1.csv,存储在examples目录中,examples目录与处理它的Python pandas代码存储在相同目录下,ex1.csv的数据内容如下,另外再创建一个ex2.csv文件,这个文件的数据内容跟ex1.csv一样,只是没有标题行。

 

通过pandas.read_csv函数将其读取出来,并打印到vs code控制台(很简单,不要搞错文件的存储目录和文件名)

import numpy as np
import pandas as pddf = pd.read_csv("examples/ex1.csv")
print(df)

jupyter中输出的pandas对象:

abcdmessage
01234hello
15678world
29101112foo

对于没有标题行的文件ex2.csv,读取此文件,可以允许 pandas 分配默认列名称,也可以自己指定名称,如下代码。

import numpy as np
import pandas as pd#pandas默认制定列名
a = pd.read_csv("examples/ex2.csv", header=None)#用names指定列名。
b = pd.read_csv("examples/ex2.csv", names=["a", "b", "c", "d", "message"])#指定 message 列成为返回的 DataFrame 的索引。
#可以指定索引位于第4列,也可以使用 index_col 参数将其命名为 “message”
names = ["a", "b", "c", "d", "message"]
c = pd.read_csv("examples/ex2.csv", names=names, index_col="message")

设置header=None,则read_csv输出(默认分配列名0 1 2 3 4):

01234
01234hello
15678world
29101112foo

用names指定列名输出:

abcdmessage
01234hello
15678world
29101112foo

用names指定列名,同时用index_col指定message为列索引名,输出:

abcd
message
hello1234
world5678
foo9101112

 如果我们想要从多个列中形成分层索引(后面的学习中还会深入学习分层索引),可以传递列号或名称列表。我们创建一个csv_mindex.csv文件,其内容如下图

我们用read_csv读取该文件,并用index_col指定列名称形成分层索引:

import numpy as np
import pandas as pdparsed = pd.read_csv("examples/csv_mindex.csv", index_col=["key1", "key2"])
print(parsed)

 输出结果如下:

value1value2
key1key2
onea12
b34
c56
d78
twoa910
b1112
c1314
d1516

在某些情况下,表格中可能没有固定的分隔符,会使用空格或其他模式来分隔字段。我们来看文本文件ex3.txt中的内容(空格分隔字典),如下图:

 

这个文本文件ex3.txt中的字段由不同数量的空格分隔。在这种情况下,我们可以将正则表达式作为 pandas.read_csv 的分隔符传递。这里可以用正则表达式 \s+ 来表示(windows下要加个转义符\),看如下代码:

import numpy as np
import pandas as pdresult = pd.read_csv("examples/ex3.txt", sep="\\s+")
print(result)

输出:

ABC
aaa-0.264438-1.026059-0.619500
bbb0.9272720.302904-0.032399
ccc-0.264273-0.386314-0.217601
ddd-0.871858-0.3483821.100491

由于列名少一个,因此pandas.read_csv推断在此特殊情况下,第一列应该是 DataFrame 的索引 。

我们再创建一个ex4.csv,第0、2、3行是注释行,其内容如下图:

我们在读取ex4.csv数据的时候需要忽略第0、2、3行注释内容,因此我们可以如下操作:

import numpy as np
import pandas as pdresult = pd.read_csv("examples/ex4.csv", skiprows=[0, 2, 3])
print(result)

 用skiprows参数指定要跳过的行,输出结果如下:

abcdmessage
01234hello
15678world
29101112foo

处理缺失值是文件数据读取过程中一个重要的部分。缺失数据通常是不存在,或是空字符串、或是由某个 sentinel (占位符)。默认情况下,pandas 使用一组常见的 sentinel替代这些缺失数据,例如 NaN 和 NULL 。我们创建一个ex5.csv文件来示例,这个文件的内容如下图:

import numpy as np
import pandas as pdresult = pd.read_csv("examples/ex5.csv")
print(result)

输出:

somethingabcdmessage
0one123.04NaN
1two56NaN8world
2three91011.012foo

pandas 将缺失值输出为 NaN,因此我们在 result 中有两个缺失值NaN。可以用isna函数判断: 

pd.isna(result) 输出:

somethingabcdmessage
0FalseFalseFalseFalseFalseTrue
1FalseFalseFalseTrueFalseFalse
2FalseFalseFalseFalseFalseFalse

我们还以通过传递一个缺失值列表给na_values参数,指定哪些值是缺失值,例如我们将1和NULL指定为缺失值:

import pandas as pdresult = pd.read_csv("examples/ex5.csv", na_values=["NULL",'1'])print(result)

 输出:

somethingabcdmessage
0oneNaN23.04NaN
1two5.06NaN8world
2three9.01011.012foo

其中元素值1以及为null的元素,都用默认值NaN填充了。

 另外,可以用keep_default_na=False设置缺失值进行isna判断时不为True,例如:

import pandas as pdresult2 = pd.read_csv("examples/ex5.csv", keep_default_na=False)
print(result2)
print(result2.isna())result3 = pd.read_csv("examples/ex5.csv", keep_default_na=False, na_values=["NA"])
print(result3)
print(result3.isna())

result2输出:

somethingabcdmessage
0one1234NA
1two568world
2three9101112foo

result2.isna()输出:

somethingabcdmessage
0FalseFalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalse

 result3输出:

somethingabcdmessage
0one1234NaN
1two568world
2three9101112foo

result3.isna()输出: 

somethingabcdmessage
0FalseFalseFalseFalseFalseTrue
1FalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalse

 从以上可以看出获取result2和result3数据的差别,大家可以自己琢磨下。

我们还可以为文件中的每一列指定不同的 NA 占位符,例如:

import pandas as pdsentinels = {"message": ["foo", "NA"], "something": ["two"]}
res = pd.read_csv("examples/ex5.csv", na_values=sentinels, keep_default_na=False)
print(res)

输出:

somethingabcdmessage
0one1234NaN
1NaN568world
2three9101112NaN

以下列表是一些 pandas.read_csv 函数常用参数,大家要学习列表中Description中内容,要动手写代码去试用 :


今天先学到这好累,下次学习分段读取文本文件 

相关文章:

Python数据分析NumPy和pandas(十五、pandas 数据加载、存储和文件格式)

大多数时候,我们要处理分析的数据是存储在不同格式的文件中的,有txt、csv、excel、json、xml以及二进制等磁盘文件格式,还有时候是从数据库以及从Web API中交互获取要处理的数据。现在开始学习如何用pandas从以上内容中输入和输出数据。 读取…...

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符:^ 边界符:$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…...

五、数组切片make

数组&切片&make 1. 数组2. 多维数组3. 切片3.1 直接声明新的切片函数构造切片3.3 思考题3.4 切片和数组的异同 4. 切片的复制5. map5.1 遍历map5.2 删除5.3 线程安全的map 6. nil7. new和make 1. 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数…...

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测 目录 SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现SSA-CNN-LSTM-MATT麻雀算法优化卷积神经网络-长短期记忆神经网络融合多头注意力机制多特征分类预测&…...

51单片机完全学习——LCD1602液晶显示屏

一、数据手册解读 通过看数据手册我们需要知道,这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道,这些引脚和我们的编程是有关的,需要注意的是,这里我们在接线的时候,一定要把DB0-DB7接到…...

【知识科普】今天聊聊前端打包工具webpack

文章目录 webpack概述1. 入口(Entry)2. 输出(Output)3. Loader4. 插件(Plugins)5. 模式(Mode)6. 浏览器兼容性(Browser Compatibility)7. 环境(En…...

雷池社区版中升级雷池遇到问题

关于升级后兼容问题 版本差距过大会可能会发生升级后数据不兼容导致服务器无法起来 跨多个版本(超过1个大版本号)升级做好数据备份,遇到升级失败可尝试重新安装解决 升级提示目录不对 在错误的目录下执行(比如 safeline 的子目…...

C++基础:constexpr,类型转换和选择语句

constexpr 提到constexpr&#xff0c;我们会发现它和const类比 常和const类比constexpr符号常量必须给定一个在编译时已知的值&#xff0c; 若某个变量初始化时的值在编译时未知&#xff0c;但初始化后绝不变。 #include<iostream> #include<vector> #include&l…...

STM32 RTC时间无法设置和读取

hal_stm32_RTC函数_stm32 hal rtc-CSDN博客 STM32入门HAL库-RTC实时时钟_hal rtc-CSDN博客 参考了这些博客&#xff0c;是调试发现无法读取正确的时间&#xff0c;日期可以 通过读hal库的文件找到原因 --RTC_BINARY_ONLY模式&#xff0c;只有 sTime->SubSeconds only is …...

go语言中defer用法详解

defer 是 Go 语言中的一个关键字&#xff0c;用于延迟执行某个函数或语句&#xff0c;直到包含它的函数返回时才执行。defer 语句在函数执行结束后&#xff08;无论是正常返回还是由于 panic 返回&#xff09;都将执行。 defer 的基本用法 延迟执行&#xff1a; 当你在一个函数…...

iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店

苹果今天为开发人员推送了iOS 18.2开发者预览版 Beta 1版本 更新&#xff08;内部版本号&#xff1a;22C5109p&#xff09;&#xff0c;本次更新距离上次发布 Beta / RC 间隔 2 天。该版本仅适用于支持Apple Intelligence的设备&#xff0c;包括iPhone 15 Pro系列和iPhone 16系…...

【SQL】SQL函数

&#x1f4e2; 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 &#x1f384; 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接&#xff0c;将S1&#xff0c;S2&#xff0…...

NSSCTF刷题篇web部分

源码泄露 [FSCTF 2023]寻找蛛丝马迹 这个源码泄露&#xff0c;可以记录一下&#xff0c;涉及的知识点比较多 打开环境 查看源码&#xff0c; 第一段flag 乱码&#xff0c;恢复一下 乱码恢复网站&#xff1a;乱码恢复 (mytju.com) 剩下的就只说方法 http://node4.anna.nss…...

超子物联网HAL库笔记:准备篇

超子物联网 HAL库学习 汇总入口&#xff1a; 超子物联网HAL库笔记&#xff1a;[汇总] 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 1. HAL库简介 HAL库 HAL库&#xff08;Hardware Abstraction Layer&#…...

FoRAG:面向网络增强型长文本问答的事实优化检索增强生成方法

人工智能咨询培训老师叶梓 转载标明出处 检索增强生成技术尽管出现了各种开源方法和商业系统&#xff0c;如Bing Chat&#xff0c;但生成的长文本答案中缺乏事实性和清晰逻辑的问题仍未得到解决。为了解决这些问题&#xff0c;来自蚂蚁集团和清华大学的研究者们提出了一种名为…...

Android NSD局域网发现服务

近期在了解局域网发现服务的时候无意间看到Android 自带的&#xff08;Network Service Discovery&#xff09;网络发现服务&#xff0c;在一番验证之后发现实现比较简单&#xff0c;可靠性也高&#xff0c;因此在这里做一个整理&#xff0c;算是对自己知识做一个归档。 网络服…...

算法的学习笔记—左旋转字符串(牛客JZ58)

&#x1f600;前言 在程序设计中&#xff0c;字符串处理问题屡见不鲜&#xff0c;其中“字符串左旋”是一种常见操作&#xff0c;今天我们一起来探讨一个经典的左旋转字符串题目&#xff0c;以及一种优雅的解决方案——三步翻转法。 &#x1f3e0;个人主页&#xff1a;尘觉主页…...

Mac 上无法烧录 ESP32C3 的问题记录:A fatal error occurred:Failed to write to target RAM

文章目录 问题描述驱动下载地址问题解决&#xff1a;安装 CH343 驱动踩的坑日志是乱码 问题描述 我代码编译可以&#xff0c;但是就是烧录不上去 A fatal error occurred:Failed to write to target RAM(result was 01070000:Operation timed out) Uploaderror:上传失败&…...

ios 项目升级极光SDK

由于项目使用的是旧版本&#xff0c;隐私合规检查不通过&#xff0c;需要升级到最新版本&#xff0c; 使用cocoapods集成无法正常运行&#xff0c;.a文件找不到&#xff0c;可能项目比较久了&#xff0c;最好选择手动导入 下载最新版本SDK&#xff0c;将 SDK 包解压&#xff…...

【Java】java | logback日志配置 | 按包配置级别

一、概述 日志配置需求&#xff1a; 本地部分包开debug&#xff0c;其他路径走配置&#xff1b;只在本地环境有效 二、logback.xml配置 <!--本地调试&#xff0c;开debug--> <springProfile name"dev"><logger name"cn.hg.demo" level&quo…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...