Pandas介绍
Pandas是基于Numpy的专门用于数据分析的开源Python库。
Pandas没有使用Python已有的内置数据结构,而是使用率两种新型的数据结构:Series和DataFrame
import pandas as pd
import numpy as np
Pandas和Numpy下载安装
下载地址:
进行Numpy安装,先进入whl安装包的存放目录。比如在C盘:
cd C:\
再使用命令行安装:
pip install numpy文件名.whl
文件读写
Pandas提供了一套I/O API的函数:
1.1
读取数据后自动生成DataFrame数据结构的数据。
读取方式如:
data = pd.read_csv('filename.csv')
print (type(data))#输出此数据的结构
read_csv()
我们在读取文件的时候,有许多必要的参数需要指定,以便我们得到的数据是可以直接用于后续数据分析过程的。
fixed_df = pd.read_csv('loandata_chi.csv', sep=';', encoding='gbk',
parse_dates=[u'发贷日期'], index_col=u'发贷日期', )
在读取文件的时候,我们对四个参数进行了设置:
- sep=
';'
。列分割符为';'
- encoding='gbk'。编码方式为
'gbk'
(默认为utf-8
) - parse_dates=[u'发贷日期']。解析
'发贷日期'
列中的日期 - index_col=u'发贷日期'。将
'发货日期'
列作为索引
分块读取
当数据文件过大时,需要分块读取。逐块读取文件需要设置chunksize(行数),该方法返回一个可迭代的对象TextFileReader,通过对这个对象进行迭代,我们就可以每次读入部分数据,然后在每个部分数据集上进行计算。
chunker = pd.read_csv('loandata.csv', chunksize=4)
for piece in chunker:
pass
# 使用piece做后续处理
另外还有一个get_chunk()
方法,它使你可以读取任意大小的块:
f = pd.read_csv('loandata.csv', iterator=True)
df.get_chunk(4)
read_csv常见参数
不只是read_csv(),其他如read_table()的读取函数也大致有以下参数:
参数 | 说明 |
---|---|
sep或delimiter | 用于对行中各字段进行拆分的字符序列或正则表达式 |
index_col | 用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引) |
nrows | 读取前几行数据 |
skiprows | 指定跳过其中几行 |
header | 用作列名的行号。默认为0(第一行),如果没有header行就应该设置为None |
names | 用于结果的列名列表,结合header=None |
usecols | 指定读取其中的几列,usecols=['grade']表明只读grade列 |
dtype | 指定每列数据的数据类型。例如 {'a': np.float64, 'b': np.int32} |
na_values | 一组用于替换NA/NaN的值 |
encoding | 指定字符集编码类型,通常指定为'utf-8' |
iterator | 返回一个TextFileReader 对象,以便逐块处理文件 |
chunksize | 文件块的大小,降低内存占用 |
to_csv()
在Pandas中,如果是一个DataFrame对象,可以使用to_csv方法将该数据结构存入一个文件。
import sys
df = pd.read_csv('loandata.csv', nrows=3, index_col='grade')
df.to_csv('loandata_3.csv')
to_csv
方法也存在多个与read_csv
相同的参数。
在输出时,索引也会一同输出,要想取消索引的输出,则:
df = pd.read_csv('loandata.csv', nrows=3)
df.to_csv(sys.stdout, index=False)
Excel文件的读写
通常情况下,读取Excel文件,需要设置sheetname。
pd.read_excel('loandata.xls', sheetname='first')
#读取单个sheet
df = pd.read_excel('loandata.xls', sheetname=['first', 'second'])
df['second']
#读取多个sheet到df中
网友评论