python数据分析-- 本地数据的IO操作
2017-05-17 00:00
381 查看
Python数据分析_Pandas04_本地数据的导入导出
本地数据的IO操作
pandas可以很方便的读取/存储各种格式的本地文件,读取用read_xx(),写入用
to_xx()。
读取 写入 read_csv to_csv read_excel to_excel read_hdf to_hdf read_sql to_sql read_json to_json read_msgpack (experimental) to_msgpack (experimental) read_html to_html read_gbq (experimental) to_gbq (experimental) read_stata to_stata read_sas read_clipboard to_clipboard read_pickle to_pickle
上面是官方文档列出来的用来读取数据的方法,支持好多格式的数据呢。有些我都没见过没听说,我有用到的有csv, excel, json, pickle等。它们的用法都差不多,而且特别简单。以
read_csv()为主简单介绍一下pandas读取和存储数据的方法。
pd.read_csv()
基本用法
In [1]: import pandas as pd In [4]: data = pd.read_csv('D:/test.csv') In [5]: data.head() Out[5]: Date Open High Low Close Volume Adj Close 0 2011/5/25 12355.45 12462.28 12271.90 12394.66 4.109670e+09 12394.66 1 2011/5/24 12381.87 12465.80 12315.42 12356.21 3.846250e+09 12356.21 2 2011/5/23 12511.29 12511.29 12292.49 12381.26 3.255580e+09 12381.26 3 2011/5/20 12604.64 12630.11 12453.96 12512.04 4.066020e+09 12512.04 4 2011/5/19 12561.46 12673.78 12506.67 12605.32 3.626110e+09 12605.32
什么参数都不设置的情况就是这样,读取进来之后是dataframe格式,自动生成数字索引。
它的参数特别多!!!
种种参数
filepath_or_buffer: 路径或文件,也可以是URL地址。
sep和
delimiter:分隔符。默认是','逗号。
delim_whitespace:布尔型,默认False。决定是否将空格当做分隔符,相当于
sep='\s+'。如果这里设置为True的话,
delimiter就不要设置参数了。
列、列名和索引
header:设置作为列名的行,值可以是int或int组成的list,默认是'infer',如果names没有传参数,把第一行当做列名。如果设置为None,自动生成一组数字列名。
names:array-like,默认None。也是用来设置列名的,直接传一个字符串组成的矩阵形式的的参数。
index_col:设置index。可以是int或list(如果有多列索引用list),默认为None。
还有其他呢,不常用不列举了。下面挨个试试。
In [8]: data = pd.read_csv('D:/test.csv',header=None) In [9]: data.head(2) Out[9]: 0 1 2 3 4 5 6 0 Date Open High Low Close Volume Adj Close 1 2011/5/25 12355.45 12462.28 12271.9 12394. 7fe0 66 4109670000 12394.66 In [10]: data = pd.read_csv('D:/test.csv',names='abcdefg') In [11]: data.head(2) Out[11]: a b c d e f g 0 Date Open High Low Close Volume Adj Close 1 2011/5/25 12355.45 12462.28 12271.9 12394.66 4109670000 12394.66 In [12]: data = pd.read_csv('D:/test.csv',index_col='Date') In [13]: data.head(2) Out[13]: Open High Low Close Volume Adj Close Date 2011/5/25 12355.45 12462.28 12271.90 12394.66 4.109670e+09 12394.66 2011/5/24 12381.87 12465.80 12315.42 12356.21 3.846250e+09 12356.21
时间数据处理
parse_dates:可以是布尔型、int、ints或列名组成的list、dict,默认为False。如果为True,解析index。如果为int或列名,尝试解析所指定的列。如果是一个多列组成list,尝试把这些列组合起来当做时间来解析。(敲厉害!!)
infer_datetime_format:布尔型。如果为True,而且也设置了
parse_dates参数,可以提高速度。对于days开头的敏感。如果多列待解析的时间数据格式相同的话,这个可以大大提高解析速度。(我数据不多,感觉不出来。人家官方文档说了,反正启用了也不会有副作用。)
keep_date_col:布尔型,默认False。如果为Ture的话则保留原格式的时间列。
date_parser:设置解析时间数据所用的函数,一般按默认的走就好了。
In [14]: data = pd.read_csv('D:/test.csv',index_col='Date',parse_dates=True) #注意Date那一列的格式变了,原来是字符串格式的, #现在变成了可以进行加减操作的日期格式。 In [15]: data.head(2) Out[15]: Open High Low Close Volume Adj Close Date 2011-05-25 12355.45 12462.28 12271.90 12394.66 4.109670e+09 12394.66 2011-05-24 12381.87 12465.80 12315.42 12356.21 3.846250e+09 12356.21 #这里从新读取一个CSV文件,前三列组成日期。 In [21]: data2 = pd.read_csv('D:/test2.csv') In [22]: data2.head(2) Out[22]: Mon Day Year gas crude oil 0 1 3 1997 22.90 1.225 1 1 10 1997 23.56 1.241 #解析之后 In [23]: data2 = pd.read_csv('D:/test2.csv', : parse_dates={'date':[0,1,2]}, : index_col='date') : In [24]: data2.head(2) Out[24]: gas crude oil date 1997-01-03 22.90 1.225 1997-01-10 23.56 1.241 #保留原来的时间列 In [27]: data2 = pd.read_csv('D:/test2.csv',parse_dates={'date':[0,1,2]},infer_datetime_format=True,keep_date_col=True, ...: index_col='date') In [28]: data2.head(2) Out[28]: Mon Day Year gas crude oil date 1997-01-03 1 3 1997 22.90 1.225 1997-01-10 1 10 1997 23.56 1.241
啊,惊艳了时光!就问你棒不棒,棒 不 棒 !!
解析配置(好多的,我挑几个可能会用的)
dtype:设置数据类型,可以是类型名或{列名:类型名}组成的dict,默认None。
nrows:int,读取多少行。大文件读取片段时使用。
true_values
false_values:被认为是True和False的值。
skiprows:int或列表形式,默认None。要跳过的行数,按索引(list),或者跳过头几行(int)。
空值和NA处理
na_values:增加被当做NA/NaN的值。默认情况下这些数据会被认为是NA值,
'-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''。
keep_default_na:布尔型,默认True。如果值为False,而且
na_values进行了设置,那么NA值会被重写,使用你设置的而不是上边所列出来的。
na_filter:布尔型,默认True。检测缺失值(空值和NA值)标记。如果文件没有NA值,设置
na_filter=False可以提高读取大文件速度。
skip_blank_lines:布尔型,默认True。跳过空行,而不是解析为NA值。
啊,还有引用、注释、字符格式等等参数,一般不会到那么细枝末节的地步,不说了。
read_csv()和
read_table()几乎相等,不单单可以读取以逗号分割的CSV格式,你可以通过设置sep参数让它读取各种不同分割符号的文本文件等等。
可用参数是很多,但这个方法用起来很简单。唯一一个必须的参数就是需要读取文件的路径/地址。写入和读取类似,用法都一样。
下面的几个方法我就不再解释参数,其实都类似的,直接举几个例子看看好了。
pd.to_csv()
In [2]: import pandas as pd : data = pd.read_csv('D:/test.csv',index_col='Date',parse_dates=True) : In [5]: data[:5] Out[5]: Open High Low Close Volume Adj Close Date 2011-05-25 12355.45 12462.28 12271.90 12394.66 4.109670e+09 12394.66 2011-05-24 12381.87 12465.80 12315.42 12356.21 3.846250e+09 12356.21 2011-05-23 12511.29 12511.29 12292.49 12381.26 3.255580e+09 12381.26 2011-05-20 12604.64 12630.11 12453.96 12512.04 4.066020e+09 12512.04 2011-05-19 12561.46 12673.78 12506.67 12605.32 3.626110e+09 12605.32 #把data中Open和Close列的前五行写入to.csv文件中。 In [9]: data[:5].to_csv('D:/to.csv', columns=['Open','Close']) In [10]: data2 = pd.read_csv('D:/to.csv') #把刚生成的to.csv再读进来看看对不对。 In [11]: data2 Out[11]: Date Open Close 0 2011-05-25 12355.45 12394.66 1 2011-05-24 12381.87 12356.21 2 2011-05-23 12511.29 12381.26 3 2011-05-20 12604.64 12512.04 4 2011-05-19 12561.46 12605.32
pd.read_excel()
In [19]: excel = pd.read_excel('D:/test.xlsx', sheetname='Sheet1') In [20]: excel.head(2) Out[20]: Month Day Year gas crude oil 0 1 3 1997 22.90 1.225 1 1 10 1997 23.56 1.241 In [21]: excel['Date']=pd.to_datetime(excel[['Year','Month','Day']]) In [22]: excel = excel.set_index("Date") In [23]: excel.head(2) Out[23]: Month Day Year gas crude oil Date 1997-01-03 1 3 1997 22.90 1.225 1997-01-10 1 10 1997 23.56 1.241
pd.read_pickle & pd.to_pickle
pickle这个用起来特别简单,根本就没有其他参数。它比较特殊的是可以实现将数据或对象序列化为字节流,pickling也就是保存为二进制数,unpickling就是相反的过程。pickle的意思是泡菜,把数据泡起来之后就可以长久存放不容易变质,pickle被当做永久储存数据的一个方法。我见过用pickle保存数据是在机器学习中。把训练好的模型存成pickle文件,下次使用这个模型的时候直接读取pickle文件,而不需要再次训练。
相关文章推荐
- 使用python操作elasticsearch实现监控数据及kibana分析
- 利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 利用python进行数据分析之dataframe的常见操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作 by 是蓝先生
- Python 数据分析:pandas 操作基础篇
- python数据分析:pandas数据结构与操作
- Selenium遇到的问题8 python利用xlwt模块操作xls数据显示IO错误(Python中正反斜杠的用法)
- 小象学院_Python数据分析_第二讲_数据采集与操作
- 用python做数据分析|pandas库:DataFrame基本操作
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
- Python数据分析库pandas基本操作
- Python数据分析(4)-numpy矩阵的操作
- PythonStock(9):使用优矿uqer.io 进行简单的数据分析
- 数据分析系统DIY2/3:本地64位WIN7+DEV C++编译程序操作VMware CentOS7+MariaDB
- Python webdriver 读取本地csv文件中数据 提示:IOError: [Errno 2] No such file or directory
- 快速入门Python中文件读写IO是如何来操作外部数据的?
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
- Python操作Mysql数据库入门——数据导入pandas(数据分析准备)