Pandas 数据加载、存储与文件格式
摘自《利用Python进行数据分析2版》
- 读取文本文件和其他更高效的磁盘存储格式,
- 加载数据库中的数据,
- 利用Web API操作网络资源。
6.1 读写文本格式的数据read_csv
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。
面对不同的参数,感到头痛很正常(read_csv有超过50 个参数)。pandas文档有这些参数的例子,如果你感到阅读某个文件很难,可以通 过相似的足够多的例子找到正确的参数。
插入知识:
%的使用。
- %+ unix cell命令,可以在jupyter上运行Unix命令。
- %lsmagic 列出常用的所有魔法命令。
❗️的使用,和%类似,运行各种命令。
通过例子来分析read_*系列的参数的用法
使用Unix cell命令, 运行一个csv文件:
In [8]: !cat examples/ex1.csv a,b,c,d,message 1,2,3,4,hello 5,6,7,8,world 9,10,11,12,foo
df = pd.read_csv('ex1.csv') # a b c d message #0 1 2 3 4 hello #1 5 6 7 8 world #2 9 10 11 12 foo
默认第一行为header,参数是header='infer',但如果文件没有header:
- 需使用names参数指定。
- 或者修改header=None, 这会自动增加一行递增的整数列名。
参数index_col: 把列设置为index。
pd.read_csv('ex1.csv', index_col='message')
参数index_col:还可以设置MultiIndex。多重索引, index_col : array_like
参数sep: 设置分隔符号,可以使用正则表达式。
- pandas的re包(正则表达式)\s 代表空格,包括
\t\n\r\f\v。
- 所以sep="\s+",就代表1个以上的空格作为分隔符号。
参数skiprows : list-like, int, callable
- 根据行号,忽略掉一些行
参数nrows : int
- 读取部分行,一般用于大文件,分块读取行。
⚠️参数na_values: scalar, str, list, dict,用于处理缺失值。
- 默认:如果发现值是'', '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN', '-NaN', '-nan'等等,则解析为NaN。
- 可以指定某些values,转换为NaN.
#values中的1,2,3被转换为NaN pd.read_csv('ex5.csv', na_values=[1,2,3])
逐块读取文本文件
#设置jupyter中每个cell执行后显示的行数
pd.options.display.max_rows = 60
使用参数:chunksize : int
- 会返回一个可迭代的对象。pandas.io.parsers.TextParser
- 然后对这个对象进行for循环,处理其中的数据。
将数据写出到文本格式to_csv
1.使用to_csv,默认把数据写到一个以逗号“,”为seperator分隔符号的文件。
2.可以使用参数sep指定分隔符号。
3.缺失值NaN等的处理,默认会输出为空字符串""。使用参数na_rep来设置缺失值以什么表示。
4.如果不保存index和column标签,则使用参数index=False, header=False
5.参数columns=[]可以指定列
例子:
data #something a b c d message #0 one 1 2 3.0 4 NaN #1 two 5 6 NaN 8 world #2 three 9 10 11.0 12 foo import sys # 输出到屏幕 data.to_csv(sys.stdout, sep="|", na_rep="NaN") #|something|a|b|c|d|message #0|one|1|2|3.0|4|NaN #1|two|5|6|NaN|8|world #2|three|9|10|11.0|12|foo data.to_csv(sys.stdout, index=False, header=False) #one,1,2,3.0,4, #two,5,6,,8,world #three,9,10,11.0,12,foo
处理分隔符格式 197页
本章主要将pandas内置的包csv的用法。
对于那些使用复杂分隔符或多字符分隔符的文件,csv模块就无能为力 了。
这种情况下,你就只能使用字符串的split方法或正则表达式方法re.split进 行行拆分和其他整理工作了。
后面的章节未阅读。
JSON数据
XML和HTML:Web信息收集
6.2 二进制数据格式
实现数据的高效二进制格式存储最简单的办法之一是使用Python内置的pickle序列化。
使用HDF5格式
读取Microsoft Excel文件
6.3 Web APIs交互
许多网站都有一些通过JSON或其他格式提供数据的公共API。通过Python访问这些 API的办法有不少。一个简单易用的办法(推荐)是requests包
6.4 数据库交互
案例见之前的博客:https://www.cnblogs.com/chentianwei/p/12103298.html
你肯定不想每查一次数据库就重写一次。SQLAlchemy 项目是一个流行的Python SQL工具,它抽象出了SQL数据库中的许多常见差异。
pandas有一个read_sql函数,可以让你轻松的从SQLAlchemy连接读取数据。