Pandas操作csv文件方法整理
介绍
Pandas 是 python 的一个数据分析包,可以方便地从本地读样本数据,提供了很多读取的方式。
安装
推荐使用anaconda,集成了平常比较常用的python库,里面就有 numpy、pandas 等,使用起来非常方便。
官方文档
https://pandas.pydata.org/pandas-docs/stable/index.html
CSV文件
csv文件就是以固定分隔符,比如逗号为分隔符,分割数据的文本文件,文件扩展名为csv。
使用
文件是上证指数,获取方式是网易的接口(感谢网易):
http://quotes.money.163.com/service/chddata.html?code=0000001&start=20190101&end=20191231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER
打开文件
read_csv()方法,读取整个.csv文件;
#数据预处理以及绘制图形需要的模块
import numpy as np
import pandas as pd
#从csv读取数据,这里要指定字符集,不然会报错,默认是utf8的,我这里从网易回来时gb的
dataset = pd.read_csv('./000001.csv', encoding = 'gb18030')
print(dataset)
#在打开文件的时候,不显示列名行
dataset = pd.read_csv('./000001.csv', encoding = 'gb18030',header=1)
print(dataset)
#在打开文件的时候不显示左侧的编号列
dataset = pd.read_csv('./000001.csv', encoding = 'gb18030',index_col=0)
print(dataset)
#在打开文件的时候只取指定的列
dataset = pd.read_csv('./000001.csv', encoding = 'gb18030',usecols=[0,2])
print(dataset)
#基于索引列来获取行(和上面输出一样,有时候索引要不是数字,比如时间,用这个比较方便)
print('第几个数据')
print(dataset.iloc[0])
#该方法也可以类似于python中列表的操作,使用切片,例如取第 3 - 5 行的数据
print('第3 - 5 行数据')
print(dataset.iloc[3:5])
#可以传进去一个列表,例如打印 2,3,5 行的数据
print('打印 2,3,5 行的数据')
print(dataset.iloc[[2,3,5]])
输出:
image.png
其他常用参数:
filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
可以是URL,可用URL类型包括:http, ftp, s3和文件。对于多文件正在准备中
本地文件读取实例:://localhost/path/to/table.csv
sep : str, default ‘,’
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’
delimiter : str, default None
定界符,备选分隔符(如果指定该参数,则sep参数失效)
delim_whitespace : boolean, default False.
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。
在新版本0.18.1支持
header : int or list of ints, default ‘infer’
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的2;本例中的数据1,2,4行将被作为多级标题出现,第3行数据将被丢弃,dataframe的数据从第5行开始。)。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
names : array-like, default None
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。
index_col : int or sequence or False, default None
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
如果文件不规则,行尾有分隔符,则可以设定index_col=False 保证pandas用第一列作为行索引。
usecols : array-like, default None
返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
skiprows : list-like or integer, default None
需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
skipfooter : int, default 0
从文件尾部开始忽略。 (c引擎不支持)
skip_footer : int, default 0
不推荐使用:建议使用skipfooter ,功能一样。
nrows : int, default None
需要读取的行数(从文件头开始算起)。
其他的参数还很多,又特殊需要可以去官方手册查阅
获取数据
好多时候都需要数据都加载,在执行的时候,动态的操作数据。
获取行数据
print('打印列名')
print(dataset.columns)
#使用 shape 方法,打印数据的维度,一共有几行几列
print('打印数据的维度')
print(dataset.shape)
#使用 loc[ ] 方法,打印第几个数据,参数是数据的行号,例如取第 1 行数据
print('第几个数据')
print(dataset.loc[0])
#该方法也可以类似于python中列表的操作,使用切片,例如取第 3 - 5 行的数据
print('第3 - 5 行数据')
print(dataset.loc[3:5])
#可以传进去一个列表,例如打印 2,3,5 行的数据
print('打印 2,3,5 行的数据')
print(dataset.loc[[2,3,5]])
image.png
获取列数据
#基于列名来获取列
print('第日期列数据')
print(dataset['日期'])
#该方法也可以类似于python中列表的操作,使用切片,例如用列名的数据
print('第日期,股票代码,名称列数据')
print(dataset[['日期','股票代码','名称']])
组合行列的选取
# 全部行的,指定列
print(dataset.loc[:, ['日期', '股票代码','名称']])
# 索引选取行
print(dataset.iloc[5:10, 0:4])
# 列名选取行
print(dataset.loc[5:10, ['日期', '股票代码','名称']])
输出:
image.png