用途:
读取CSV(逗号分割)文件到DataFrame,也支持文件的部分导入和选择迭代
语法:
pandas.read_csv(filepath_or_buffer, sep=’, ‘, delimiter=None, header=‘infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar=’"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
主要参数及说明:
参数及实例:
示例数据下载::
链接:https://pan.baidu.com/s/1aLLxqLsEAcaKlM6pw4WDgw
提取码:mcfd
从CSV文件中加载数据:此处path是相对路径
import pandas as pd
data=pd.read_csv('exampledata.csv')
print(data)
#输出:行数过多会被省略
year quarter realgdp ... realdpi cpi m1
0 1959 1 2710.349 ... 1886.9 28.980 139.7
1 1959 2 2778.801 ... 1919.7 29.150 141.7
2 1959 3 2775.488 ... 1916.4 29.350 140.5
3 1959 4 2785.204 ... 1931.3 29.370 140.0
4 1960 1 2847.699 ... 1955.5 29.540 139.6
5 1960 2 2834.390 ... 1966.1 29.550 140.2
6 1960 3 2839.022 ... 1967.8 29.750 140.9
7 1960 4 2802.616 ... 1966.6 29.840 141.1
8 1961 1 2819.264 ... 1984.5 29.810 142.1
9 1961 2 2872.005 ... 2014.4 29.920 142.9
.........................
参数header: int list of ints 将某行制定为列名,默认header=0
#指定第二行为列名:
import pandas as pd
data=pd.read_csv('exampledata.csv',header=1)
print(data)
#输出:
1959 1 2710.349 1707.4 ... 470.045 1886.9 28.98 139.7
0 1959 2 2778.801 1733.7 ... 481.301 1919.7 29.150 141.7
1 1959 3 2775.488 1751.8 ... 491.260 1916.4 29.350 140.5
...............
names : array-like, default None自定义列标题,需设定header=None。
import pandas as pd
data=pd.read_csv('exampledata.csv',header=None,names=list('abcdefghi'))
print(data)
#输出:
a b c ... g h i
0 year quarter realgdp ... realdpi cpi m1
1 1959 1 2710.349 ... 1886.9 28.98 139.7
2 1959 2 2778.801 ... 1919.7 29.15 141.7
3 1959 3 2775.488 ... 1916.4 29.35 140.5
.......
index_col : int or sequence or False, default None
指定哪一列作为行索引,如果给定一个序列则是指定多层索引:
import pandas as pd
data=pd.read_csv('exampledata.csv',index_col=(0,1))
print(data)
#输出:
realgdp realcons realinv ... realdpi cpi m1
year quarter ...
1959 1 2710.349 1707.4 286.898 ... 1886.9 28.980 139.7
2 2778.801 1733.7 310.859 ... 1919.7 29.150 141.7
3 2775.488 1751.8 289.226 ... 1916.4 29.350 140.5
4 2785.204 1753.7 299.356 ... 1931.3 29.370 140.0
1960 1 2847.699 1770.5 331.722 ... 1955.5 29.540 139.6
2 2834.390 1792.9 298.152 ... 1966.1 29.550 140.2
3 2839.022 1785.8 296.375 ... 1967.8 29.750 140.9
4 2802.616 1788.2 259.764 ... 1966.6 29.840 141.1
1961 1 2819.264 1787.7 266.405 ... 1984.5 29.810 142.1
2 2872.005 1814.3 286.246 ... 2014.4 29.920 142.9
3 2918.419 1823.1 310.227 ... 2041.9 29.980 144.1
4 2977.830 1859.6 315.463 ... 2082.0 30.040 145.2
...............
usecols:单列数或多列数组成的列表,单列名称或多列名称组成的列表
指定加载哪些列:
#加载前三列
import pandas as pd
data=pd.read_csv('exampledata.csv',usecols=(0,1,2))
print(data)
#输出:
year quarter realgdp
0 1959 1 2710.349
1 1959 2 2778.801
2 1959 3 2775.488
3 1959 4 2785.204
............
prefix : str, default None 在没有列标题时,给列添加前缀
import pandas as pd
data=pd.read_csv('exampledata.csv',usecols=(0,1,2),header=None,prefix='list')
print(data)
#输出:
list0 list1 list2
0 year quarter realgdp
1 1959 1 2710.349
2 1959 2 2778.801
3 1959 3 2775.488
............
dtype:字典{‘列名/列号’:‘指定的数据类型’}
数据类型见:https://wizardforcel.gitbooks.io/ts-numpy-tut/content/3.html
data=pd.read_csv('exampledata.csv',usecols=(0,1,2),dtype={2:np.float64})
print(np.array(data).dtype)
#输出:
float64
converters:{‘列名/列号’:‘函数’} 将函数应用于指定的列
skiprows :list-like or integer 指定忽略的行数
skipfooter :同上,但是从文件尾部开始数
nrows : int 需要读取的行数,从文件头部开始
na_values : scalar, str, list-like, or dict, default None ,指定某些值为空值.
默认为空值的值有,默认会将’-1.#IND’, ‘1.#QNAN’, ‘1.#IND’, ‘-1.#QNAN’, ‘#N/A N/A’,’#N/A’, ‘N/A’, ‘NA’, ‘#NA’, ‘NULL’, ‘NaN’, ‘-NaN’, ‘nan’, ‘-nan’, ''转换为NaN,如有需求,可指定某些值为空值
skip_blank_lines : boolean, default True:如果为True,则跳过空行;否则记为NaN
parse_dates:解析日期
parse_dates : boolean or list of ints or names or list of lists or dict, default False
parsedate的值可以是:
boolean. True -> 解析索引
list of ints or names. e.g. If [1, 2, 3] -> 解析1,2,3列的值作为独立的日期列;
list of lists. e.g. If [[1, 3]] -> 合并1,3列作为一个日期列使用
dict, e.g. {‘foo’ : [1, 3]} -> 将1,3列合并,并给合并后的列起名为"foo"
date_parser:指定一个自定义函数解析日期
Pandas默认的数据读取格式是‘YYYY-MM-DD HH:MM:SS’。
参数可以是:
1.使用一个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为一个列作为参数;
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。
#定义一个解析的日期的方法,
dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d')
parse_dates指定要将那些数据做日期解析,此处是将 year mont date三列合并为datetime列并解析
data=pd.read_csv('exampledata.csv',nrows=5,date_parser=dateparse,parse_dates={'datetime':['year','month','date']})
print(data)
#这是一个坑
补:日期解析方法: dateutil.parser.parse
可以解析几乎所有人类可以理解的时间日期形式
from dateutil.parser import parse
dt=parse('Jan 31,1997, 10:45 PM')
print(dt)
#输出:
2019-01-31 22:45:00
chunksize:int 将文件切成等量的块,可用于迭代,生成TextFileReader迭代器
例如:chunksize=5,则将读取到的数据分成多块,每份5行
import pandas as pd
import numpy as np
data=pd.read_csv('exampledata.csv',chunksize=5)
for i in data:
print(i)
#输出:
year month date realgdp ... realgovt realdpi cpi m1
0 1959 1 1 2710.349 ... 470.045 1886.9 28.98 139.7
1 1959 2 2 2778.801 ... 481.301 1919.7 29.15 141.7
2 1959 3 3 2775.488 ... 491.260 1916.4 29.35 140.5
3 1959 4 4 2785.204 ... 484.052 1931.3 29.37 140.0
4 1960 1 5 2847.699 ... 462.199 1955.5 29.54 139.6
[5 rows x 10 columns]
year month date realgdp ... realgovt realdpi cpi m1
5 1960 2 6 2834.390 ... 460.400 1966.1 29.55 140.2
6 1960 3 7 2839.022 ... 474.676 1967.8 29.75 140.9
7 1960 4 8 2802.616 ... 476.434 1966.6 29.84 141.1
8 1961 1 9 2819.264 ... 475.854 1984.5 29.81 142.1
9 1961 2 10 2872.005 ... 480.328 2014.4 29.92 142.9
[5 rows x 10 columns]
.........
可以用get_chunk(int/None)方法进行迭代:
get_chunk()不传参数,默认迭代一个chunk
get_chunk(int) 传入数字参数,自定义迭代n条记录
data=pd.read_csv('exampledata.csv',chunksize=5)
print(data.get_chunk(6))
print(data.get_chunk())
#输出:
year month date realgdp ... realgovt realdpi cpi m1
0 1959 1 1 2710.349 ... 470.045 1886.9 28.98 139.7
1 1959 2 2 2778.801 ... 481.301 1919.7 29.15 141.7
2 1959 3 3 2775.488 ... 491.260 1916.4 29.35 140.5
3 1959 4 4 2785.204 ... 484.052 1931.3 29.37 140.0
4 1960 1 5 2847.699 ... 462.199 1955.5 29.54 139.6
5 1960 2 6 2834.390 ... 460.400 1966.1 29.55 140.2
[6 rows x 10 columns]
year month date realgdp ... realgovt realdpi cpi m1
6 1960 3 7 2839.022 ... 474.676 1967.8 29.75 140.9
7 1960 4 8 2802.616 ... 476.434 1966.6 29.84 141.1
8 1961 1 9 2819.264 ... 475.854 1984.5 29.81 142.1
9 1961 2 10 2872.005 ... 480.328 2014.4 29.92 142.9
10 1961 3 11 2918.419 ... 493.828 2041.9 29.98 144.1
[5 rows x 10 columns]
注意:
get_chunk的方法类似迭代器的next方法,如例:第一次迭代了6条数据,第二次则从第七条开始迭代,不可循环迭代