pandas.read_csv学习笔记

pandas.read_csv功能很简单,就是读取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, 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, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)[source]

参数详解:

filepath_or_buffer : 字符串,文件路径,或者文件句柄,或者字符串IO

字符串可能是一个URL。有效的URL方案包括http、ftp、s3和file。对于文件URL,需要主机名 。例如,本地文件可以是://localhost/path/to/table.csv

sep : 字符串,分割符,默认值为‘,’

分割符的使用。如果sep为None,则C引擎无法自动检测分隔符,但Python解析引擎可以检测,这意味着将使用后者,并通过Python的内置嗅探器csves.niffer自动检测分隔符。此外,长度大于1个字符的分隔符将被解释为正则表达式,并强制使用Python解析引擎。注意,that regexdelimiters are prone to ignoring quoted data。正则表达式示例:'\r\t'

delimiter : 字符串,分割符,默认值为 none

seq分割符参数的替代名称

delim_whitespace : 布尔,默认值为 False

是否指定使用空格隔离符,(列如: ' '或 '    ') ,等价于 sep='\s+'.  如果此参数为True,隔离符参数将不发生效力

扫描二维码关注公众号,回复: 3243769 查看本文章


header :整数,或整数列表,缺省值  ‘infer’

数据开始前的列名所占用的行数,缺省值‘infer’将第一行视作列名,如果names参数有值,且header=0将使用names参数作为列名。如果skip_blank_lines=True,则header=0表示数据开始的第一行。header可以是一个整数的列表,如[0,1,3]。未指定的中间行将被删除(例如,跳过此示例中的2行)。注意,thisparameter参数忽略了注释。

实验:

多行列的实验:

In [21]: a = pd.read_csv('t.txt',header=[1,2])

     a     b     c     d     e
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [23]: a = pd.read_csv('t.txt',header=[0,1])

      d  open     h     l     c
      a     b     c     d     e
0    dd    oo    hh    ll    cc
1  1226  1240  1245  1237  1241
2  1227  1246  1247  1233  1239

In [25]: a = pd.read_csv('t.txt',header=[0,2])

In [26]: a
Out[26]:
      d  open     h     l     c
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [27]: a = pd.read_csv('t.txt',header=[0,1,2])

In [28]: a
Out[28]:
      d  open     h     l     c
      a     b     c     d     e
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [29]: a = pd.read_csv('t.txt',header=[3])

In [30]: a
Out[30]:
Empty DataFrame
Columns: [1226, 1240, 1245, 1237, 1241]
Index: []

In [31]: a = pd.read_csv('t.txt',header=[2])

In [32]: a
Out[32]:
Empty DataFrame
Columns: [dd, oo, hh, ll, cc]
Index: []

In [33]: a = pd.read_csv('t.txt',header=[1,2])

In [34]: a
Out[34]:
      a     b     c     d     e
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [35]: a = pd.read_csv('t.txt',header=[2])

In [36]: a
Out[36]:
Empty DataFrame
Columns: [dd, oo, hh, ll, cc]
Index: []

In [37]: a = pd.read_csv('t.txt',header=2)

In [38]: a
Out[38]:
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [40]: a = pd.read_csv('t.txt',header=1)

In [41]: a
Out[41]:
      a     b     c     d     e
0    dd    oo    hh    ll    cc
1  1226  1240  1245  1237  1241
2  1227  1246  1247  1233  1239

In [42]: a = pd.read_csv('t.txt',header=1,names=['date','open','heigh','low','close'])

In [43]: a
Out[43]:
   date  open heigh   low close
0    dd    oo    hh    ll    cc
1  1226  1240  1245  1237  1241
2  1227  1246  1247  1233  1239
多行列实验总结:
列可以是多行,但是[2]或[1]会返回空DataFrame,另外只有单行的列才可以使用names参数。

names
: 列名数组,缺省值 None

当header=None时,将使用 names作为列名,如果heander指定特定行,则使用names作为替代

index_col : int or sequence or False, default None

作为DataFrame的行标签使用的列。如果给定一个序列,则使用aMultiIndex。如果在每一行的末尾都有一个带有分隔符的格式错误的文件,那么可以考虑使用index_col=False来强迫pandas使用默认序列作为行名称


从实验中可以看到,如果行的末尾有','分割符时,如果不使用index_col=False,则DataFrame第一列为行索引,“,”后面作为空值列。

usecols : array-like or callable, default None

返回列的一个子集。如果是数组,所有元素都必须是位置(即,整数索引到文档列中),或者是与列名称相对应的字符串,这些列名要么由用户输入,要么从文档头部行(s)中推断出来。例如,一个有效的数组参数use-cols参数将是[0,1,2]或[' foo ', ' bar ', ' baz ']。

下面这句不懂

If callable, the callable function will be evaluated against the columnnames, returning names where the callable function evaluates to True. Anexample of a valid callable argument would belambda x: x.upper() in['AAA','BBB', 'DDD']. Using this parameter results in much fasterparsing time and lower memory usage.

as_recarray : boolean, default False

从版本0.19.0开始就不建议使用:请调用read_csv(…).to_records()。

在解析数据之后返回一个NumPy recarray而不是DataFrame。如果设置为True,此选项将优先于这些参数。此外,由于行索引在这种格式中不可用,所以index_col参数将被忽略。

squeeze : boolean, default False

如果解析后的数据只包含一个列,那么返回一个 Series

prefix : str, default None

自动生成的列名编号的前缀,如: ‘X’ for X0, X1, ...

In [11]: b = pd.read_csv('t.txt',prefix='x')

In [12]: b
Out[12]:
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [13]: b = pd.read_csv('t.txt',header=None,prefix='x')

In [14]: b
Out[14]:
     x0    x1    x2    x3    x4
0    dd    oo    hh    ll    cc
1  1226  1240  1245  1237  1241
2  1227  1246  1247  1233  1239

mangle_dupe_cols : boolean, default True

重复的列将被指定为' X.0 '…' X。N’,而不是'X”…“X”。如果列中有重复的名称,传递False将导致数据被覆盖

dtype : Type name or dict of column -> type, default None

指定列的数据类型,如:{‘a’: np.float64, ‘b’: np.int32} ,如果指定转换器,它们将被应用于dtype转换

engine : {‘c’, ‘python’}, optional

解析器引擎使用。C引擎的速度更快,而python引擎的功能则更完善。

converters : dict, default None

设置指定列的处理函数,可以用"序号"也可以使用“列名”进行列的指定

实验:

In [20]: b=pd.read_csv('t.txt')

In [21]: b
Out[21]:
    dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

In [23]: def fun(x):
    ....:     x = int(x) - 1000
    ....:     return x
    ....:


In [30]: b = pd.read_csv('t.txt',converters={1:fun})

In [31]: b
Out[31]:
    dd   oo    hh    ll    cc
0  1226  240  1245  1237  1241
1  1227  246  1247  1233  1239

In [32]: b = pd.read_csv('t.txt',converters={'dd':fun})

In [33]: b
Out[33]:
    dd    oo    hh    ll    cc
0  226  1240  1245  1237  1241
1  227  1246  1247  1233  1239

In [34]: b = pd.read_csv('t.txt',converters={'dd':fun,'ll':fun})

In [35]: b
Out[35]:
    dd    oo    hh   ll    cc
0  226  1240  1245  237  1241
1  227  1246  1247  233  1239

In [36]:

true_values : list, default None (不懂)

Values to consider as True

false_values : list, default None (不懂)

Values to consider as False

skipinitialspace : boolean, default False

忽略分割符后面的空格

skiprows : list-like or integer or callable, default None

从文件开始处跳过的行数

If callable, the callable function will be evaluated against the rowindices, returning True if the row should be skipped and False otherwise.An example of a valid callable argument would belambda x: x in [0, 2]. (不懂)

skipfooter : int, default 0

忽略文件末尾处的函数,当 engine = 'c' 时此功能无效

skip_footer : int, default 0

已经废弃

Deprecated since version 0.19.0: Use the skipfooter parameter instead, as they are identical

nrows : int, default None

从文件中只读取多少数据行,常用户读取大文件的一部分

na_values : scalar, str, list-like, or dict, default None

空值定义

Additional strings to recognize as NA/NaN. If dict passed, specificper-column NA values. By default the following values are interpreted asNaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’,‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’,‘null’.

keep_default_na : bool, default True

Number of rows of file to read. Useful for reading pieces of large files

na_filter : boolean, default True

检测空值,此参数设置为 Falsek可以提供大文件的读取性能

Detect missing value markers (empty strings and the value of na_values). Indata without any NAs, passing na_filter=False can improve the performanceof reading a large file

verbose : boolean, default False

Indicate number of NA values placed in non-numeric columns

skip_blank_lines : boolean, default True

如果是真的,跳过空白行,而不是解释为NaN值


以下部分转载自:

https://www.cnblogs.com/datablog/p/6127000.html

parse_dates : boolean or list of ints or names or list of lists or dict, default False

  • 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"
 
infer_datetime_format : boolean, default False
如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。
 
keep_date_col : boolean, default False
如果连接多列解析日期,则保持参与连接的列。默认为False。
 
date_parser : function, default None
用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
1.使用一个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为一个列作为参数;
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。
 
dayfirst : boolean, default False
DD/MM格式的日期类型
 
iterator : boolean, default False
返回一个TextFileReader 对象,以便逐块处理文件。
 
chunksize : int, default None
文件块的大小,  See IO Tools docs for more informationon iterator and chunksize.
 
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。
新版本0.18.1版本支持zip和xz解压
 
thousands : str, default None
千分位分割符,如“,”或者“."
 
decimal : str, default ‘.’
字符中的小数点 (例如:欧洲数据使用’,‘).
 
float_precision : string, default None
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converter.
指定
 
lineterminator : str (length 1), default None
行分割符,只在C解析器下使用。
 
quotechar : str (length 1), optional
引号,用作标识开始和解释的字符,引号内的分割符将被忽略。
 
quoting : int or csv.QUOTE_* instance, default 0
控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
 
doublequote : boolean, default True
双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
 
escapechar : str (length 1), default None
当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
 
comment : str, default None
标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。这个参数只能是一个字符,空行(就像skip_blank_lines=True)注释行被header和skiprows忽略一样。例如如果指定comment='#' 解析‘#empty\na,b,c\n1,2,3’ 以header=0 那么返回结果将是以’a,b,c'作为header。
 
encoding : str, default None
指定字符集类型,通常指定为'utf-8'.  List of Python standard encodings
 
dialect : str or csv.Dialect instance, default None
如果没有指定特定的语言,如果sep大于一个字符则忽略。具体查看csv.Dialect 文档
 
tupleize_cols : boolean, default False
Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns)
 
error_bad_lines : boolean, default True
如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。
 
warn_bad_lines : boolean, default True
如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。
 
low_memory : boolean, default True
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)
 
buffer_lines : int, default None
不推荐使用,这个参数将会在未来版本移除,因为他的值在解析器中不推荐使用
 
compact_ints : boolean, default False
不推荐使用,这个参数将会在未来版本移除
如果设置compact_ints=True ,那么任何有整数类型构成的列将被按照最小的整数类型存储,是否有符号将取决于use_unsigned 参数
 
use_unsigned : boolean, default False
不推荐使用:这个参数将会在未来版本移除
如果整数列被压缩(i.e. compact_ints=True),指定被压缩的列是有符号还是无符号的。
memory_map : boolean, default False
如果使用的文件在内存内,那么直接map文件使用。使用这种方式可以避免文件再次进行IO操作。


猜你喜欢

转载自blog.csdn.net/zjyklwg/article/details/79556545