免费快速建站工具,做网站的流程分析-图灵吧,什么网可以接外贸订单,聊城手机网站建设多少钱大多数时候#xff0c;我们要处理分析的数据是存储在不同格式的文件中的#xff0c;有txt、csv、excel、json、xml以及二进制等磁盘文件格式#xff0c;还有时候是从数据库以及从Web API中交互获取要处理的数据。现在开始学习如何用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 查询的结果使用 SQLAlchemyread_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对象
abcdmessage01234hello15678world29101112foo
对于没有标题行的文件ex2.csv读取此文件可以允许 pandas 分配默认列名称也可以自己指定名称如下代码。
import numpy as np
import pandas as pd#pandas默认制定列名
a pd.read_csv(examples/ex2.csv, headerNone)#用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, namesnames, index_colmessage)
设置headerNone则read_csv输出(默认分配列名0 1 2 3 4):
0123401234hello15678world29101112foo
用names指定列名输出
abcdmessage01234hello15678world29101112foo
用names指定列名同时用index_col指定message为列索引名输出
abcdmessagehello1234world5678foo9101112 如果我们想要从多个列中形成分层索引后面的学习中还会深入学习分层索引可以传递列号或名称列表。我们创建一个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) 输出结果如下
value1value2key1key2onea12b34c56d78twoa910b1112c1314d1516
在某些情况下表格中可能没有固定的分隔符会使用空格或其他模式来分隔字段。我们来看文本文件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)
输出
ABCaaa-0.264438-1.026059-0.619500bbb0.9272720.302904-0.032399ccc-0.264273-0.386314-0.217601ddd-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参数指定要跳过的行输出结果如下
abcdmessage01234hello15678world29101112foo
处理缺失值是文件数据读取过程中一个重要的部分。缺失数据通常是不存在或是空字符串、或是由某个 sentinel 占位符。默认情况下pandas 使用一组常见的 sentinel替代这些缺失数据例如 NaN 和 NULL 。我们创建一个ex5.csv文件来示例这个文件的内容如下图 import numpy as np
import pandas as pdresult pd.read_csv(examples/ex5.csv)
print(result)
输出
somethingabcdmessage0one123.04NaN1two56NaN8world2three91011.012foo
pandas 将缺失值输出为 NaN因此我们在 result 中有两个缺失值NaN。可以用isna函数判断
pd.isna(result) 输出
somethingabcdmessage0FalseFalseFalseFalseFalseTrue1FalseFalseFalseTrueFalseFalse2FalseFalseFalseFalseFalseFalse
我们还以通过传递一个缺失值列表给na_values参数指定哪些值是缺失值例如我们将1和NULL指定为缺失值
import pandas as pdresult pd.read_csv(examples/ex5.csv, na_values[NULL,1])print(result) 输出
somethingabcdmessage0oneNaN23.04NaN1two5.06NaN8world2three9.01011.012foo
其中元素值1以及为null的元素都用默认值NaN填充了。 另外可以用keep_default_naFalse设置缺失值进行isna判断时不为True例如
import pandas as pdresult2 pd.read_csv(examples/ex5.csv, keep_default_naFalse)
print(result2)
print(result2.isna())result3 pd.read_csv(examples/ex5.csv, keep_default_naFalse, na_values[NA])
print(result3)
print(result3.isna())
result2输出
somethingabcdmessage0one1234NA1two568world2three9101112foo
result2.isna()输出
somethingabcdmessage0FalseFalseFalseFalseFalseFalse1FalseFalseFalseFalseFalseFalse2FalseFalseFalseFalseFalseFalse result3输出
somethingabcdmessage0one1234NaN1two568world2three9101112foo
result3.isna()输出
somethingabcdmessage0FalseFalseFalseFalseFalseTrue1FalseFalseFalseFalseFalseFalse2FalseFalseFalseFalseFalseFalse 从以上可以看出获取result2和result3数据的差别大家可以自己琢磨下。
我们还可以为文件中的每一列指定不同的 NA 占位符例如
import pandas as pdsentinels {message: [foo, NA], something: [two]}
res pd.read_csv(examples/ex5.csv, na_valuessentinels, keep_default_naFalse)
print(res)
输出
somethingabcdmessage0one1234NaN1NaN568world2three9101112NaN
以下列表是一些 pandas.read_csv 函数常用参数大家要学习列表中Description中内容要动手写代码去试用 今天先学到这好累下次学习分段读取文本文件