您当前的位置: 首页 >  pandas

快乐很重要的汪

暂无认证

  • 5浏览

    0关注

    36博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

pandas(3)数据的读入和输出

快乐很重要的汪 发布时间:2022-09-16 16:07:13 ,浏览量:5

pandas(3)数据的读入和输出

pandas的数据一般来源于上游的表型数据。

本节目标:掌握pandas的输入和输出

本节内容:各种类型的read方法 本节技术点:输入和输出函数。以及过滤

本节阅读需要(15)min。 本节实操需要(15)min。

文章目录
  • pandas(3)数据的读入和输出
  • 前言
  • 一、CSV & text files
    • 读入
    • 输出
  • 二、json文件
    • 输入
    • 输出
  • 三、数据库文件
    • 链接
    • 读入
    • 输出
  • 四、Excel文件
      • xlrd
    • 输出
  • 五、其他的有用的小操作
    • 列名加前缀
  • 总结

前言

作为python核心的数据处理载体。pandas必须要有十分包容的数据读入形式。 这是官网的输入输出工具合集。 在这里插入图片描述

我们一般只使用其中的常见的几个。

一、CSV & text files 读入

csv虽然也是常见的表格数据,但是格式比xls等简单太多了。和普通的文本文件几乎是一致的。 csv后缀的和txt后缀的互换,大部分情况都是一样的

import pandas as pd
from io import StringIO
data = "COL1,COL2,COL3\na,b,1\na,b,2\nc,d,3"
pd.read_csv(StringIO(data))
pd.read_csv(StringIO(data), sep=",",header=None,usecols=lambda x: x.upper() in ["COL1", "COL3"],names=["col1", "col3"])

第一个是数据,可以是文件的位置,也可以是一段buffer里面的值(一个字节流变量) 这里是buffer,还难一点。 sep是分隔符一般是 逗号"," 缩进"\t" 空白"\s+" 当然一般要视具体的情况而定。

delimiter和seq差不多,一般用不到。

header比较重要。是一个整数值。代表了第几行作为列名。我们都知道Excel第一行一般是列名。 所以一般header=0。 如果想要修改或自定义传入列名。header=None,并且names传入一个序列。

usecols用于挑选某些列,我认为有点多余,因为df是可以截取的,除非一开始为了节省内存。 一般是用列名的序号或列表,也可以使用如实例所示的bool列表

在这里插入图片描述

这样第一行就会保留

dtype形如{‘a’: np.float64, ‘b’: np.int32} 的字典强行约束每一个列的数据类型。 数据类型比较杂的时候需要加上!!!

skiprows 用于跳过一些不需要的行

pd.read_csv(StringIO(data), skiprows=lambda x: x % 2 != 0)

很多文件前几行是介绍等所以常常需要跳过前几行。注释这个是从header之后开始计算的。

na_values 空值的处理。 很多情况下数据表不是都完全有值的。但是我们处理的时候空值又会很麻烦,所以我们一般会给空值一个默认值。 在dtype给定的情况下,我们可以传入一个对应的列表,规定每个列的空值替换成什么,比如整形为0,字符串为""

更多的参数见官网

输出

to_csv

sep : Field delimiter for the output file (default “,”)
na_rep: A string representation of a missing value (default ‘’)
float_format: Format string for floating point numbers
columns: Columns to write (default None)
header: Whether to write out the column names (default True)
index: whether to write row (index) names (default True)

sep一般是逗号或者tab。 header输出列名,一般都是要的。columns自定义输出的列名 index在很多情况下不需要,需要改成False。默认是True。

注意sep不同的分隔符wps和Excel读取效果可能存在小bug。普通文本编辑器当做TXT打开都是没问题的。 所以输出一定要用具体展示的office软件打开查看实际效果。不行就换一下,或者换后缀xls等等,多试试!!!

二、json文件

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

json其实就是字典,关联列表。所以极为通用。
输入

read_json,json的读取是高度自动化的。基本可以直接读入。

pd.read_json("test.json", dtype={"A": "float32", "bools": "int8"},columns=list(range(4)), index=[str(i) for i in range(4))

也就约束一下具体的类型,最多主动的命名一下行和列。

输出
dfj = pd.DataFrame(np.random.randn(5, 2), columns=list("AB"))
json = dfj.to_json()
'{"A":{"0":-0.1213062281,"1":0.6957746499,"2":0.9597255933,"3":-0.6199759194,"4":-0.7323393705},"B":{"0":-0.0978826728,"1":0.3417343559,"2":-1.1103361029,"3":0.1497483186,"4":0.6877383895}}'

其实就是从二维机构转换到树形结构。

Orient

dfjo.to_json(orient="columns") # df默认是列方向
dfjo.to_json(orient="index") # 也可以选择行方向,相当于转置后的矩阵

series默认是行方向。

三、数据库文件

我们先简单的介绍一下格式,后面写文章具体的实操一下。

链接

首先需要连接上数据库这样才能读写。

from sqlalchemy import create_engine

engine = create_engine("postgresql://scott:tiger@localhost:5432/mydatabase")
读入
pd.read_sql(
    sa.text("SELECT * FROM data where Col_1=:col1"), engine, params={"col1": "X"}
)

不使通过地址而是通过链接得到的engine作为数据源。

输出
data.to_sql("data", engine)
四、Excel文件

Excel的读取就有些坑爹了,有版本问题。。。 所以Excel尽量化繁为简。 The xlwt package for writing old-style .xls excel files is no longer maintained. The xlrd package is now only for reading old-style .xls files. It is strongly encouraged to install openpyxl to read Excel 2007+ (.xlsx) files. Please do not report issues when using xlrd to read .xlsx files. This is no longer supported, switch to using openpyxl instead.

pd.read_excel("path_to_file.xls", sheet_name="Sheet1")

一个信息单才是一个表型数据!!! 绝大部分这样写就够用了

pd.read_excel(xls, "Sheet1", index_col=None, na_values=["NA"], parse_dates=["date_strings"])
xlrd

用到了xlrd库,专业处理Excel的。

import xlrd

xlrd_book = xlrd.open_workbook("path_to_file.xls", on_demand=True)
with pd.ExcelFile(xlrd_book) as xls:
    df1 = pd.read_excel(xls, "Sheet1")
    df2 = pd.read_excel(xls, "Sheet2")
输出

df.to_excel("path_to_file.xlsx", sheet_name="Sheet1")

我们都知道很多Excel是有各种格式和排版的,但是我们不在乎,我们的目标是表型数据以及相关的运算。 排版这东西不是pandas的职责!!! 不要有奇怪的东西,不然这一块bug满天飞。。。

五、其他的有用的小操作

提一些输入输出时候的便捷操作。 我会一直更新的!!!

列名加前缀
df.columns = [f"pre_{col}" for col in df.columns]
总结

值的注意的是无论读入和输出多么仔细,还是很可能因为上下游的解析工具不同而得到意外的结果。 比如Excel就有很多家的表格软件。在一些复杂的情况下,可能会出现实际效果的差异。 这个时候需要具体的去调整。。。

不过好在绝大部分情况下读入,输出是如此简单,只需要一个文件名就行。

都是存在可以解析时间的参数的,到时候看看函数介绍就行。 在这里插入图片描述

关注
打赏
1663165558
查看更多评论
立即登录/注册

微信扫码登录

0.0383s