人工智能之Numpy与Pandas培训文档
创建时间:2018-09-09  访问量:3294  4  0

人工智能之Numpy与Pandas培训文档

如下表示,pandas能够操作的文件格式有很多,下面主要以csv的操作为例,其它操作可以看看官方文档,也可以通过表格中的链接直接进入官方文档介绍。 

Format Type Data Description Reader Writer        
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_html to_html
text Local clipboard read_clipboard to_clipboard
binary MS Excel read_excel to_excel
binary HDF5 Format read_hdf to_hdf
binary Feather Format read_feather to_feather
binary Parquet Format read_parquet to_parquet
binary Msgpack read_msgpack to_msgpack
binary Stata read_stata to_stata
binary SAS read_sas  
binary Python Pickle Format read_pickle to_pickle
SQL SQL read_sql to_sql
SQL Google Big Query read_gbq to_gbq

 

通过read_csv从csv文件中读取文件

pandas.read_csv()

这个文档是将以逗号(,)分隔的数据读入到DataFrame中。支持文件分块读取。

pandas库中的read_csv函数参数相当的多,虽然大部分都不常用,在这里我们都介绍一下:

filepath_or_buffer:str字符串, pathlib.Path对象, py._path.local.LocalPath对象或任何与read()方法相关的对象(如一个文件句柄或一个StringIO对象),字符串可以是一个URL地址。有效的URL模式包括:http, ftp, s3, and file,例如本地文件的URL可以是file://localhost/path/to/table.csv

sep:分隔符,黙认是逗号(,)。

delimiter:str字符串,黙认是None。与sep参数相同的另外一个参数名称。

delim_whitespace:boolean,黙认为False。指定空白字符是否可以作为分隔符。

header:int 或 int类型列表,黙认是'infer'自动推断。指定由哪一行作为列的名称,黙认header=0,即由第一行作为列的名称。

names:类数组,黙认是None。用来作为列名称的列表。在header=None时可用。

index_col:int整型、序列或False,黙认是None。指定由哪一列作为DataFrame的行标签。

usecols:类列表数据或可调用的函数,黙认是None。返回列的字集。usecols=[0,1]即将csv数据中的第1列与第2列初始化DataFrame。

squeeze:boolean,黙认为False。如果从CSV中只解析到一列数据,那么就返回一个Series。

prefix:str,黙认None。当没有指定header,即列标签时,那就将这个prefix加一列索引数字的前面组成列标签,如果prefix=X那么列标签就是X,X.1,X.2,...X.N。

dtype:指定数据类型。

engine:{'C','Python'}可选。用C是最快的,用Python有更完整的功能。

converts:dict,黙认是None。用于转换给定列中值函数的字典,键可以是整数或列标签。

true_values:list,黙认是None。被认为是True是值。

false_values:list,黙认是None,被认为是False的值。

skipinitialspace:boolean,黙认是False。忽略分隔符后的空白字符。

skiprows:类列表数据、整数或可回调函数,黙认None。忽略文件开始的一行或一些行。如果指定了回调函数,那么此回调函数接收行索引作为参数,返回True表示忽略该行。

skipfooter:int,黙认是0,忽略文件末尾的指定行数,不支持engin='C'

nrows:int,黙认是None。只读取文件中的指定行数。对于分片读取大文件来说很有用。

na_values:scalar,str,类列表list,或dict,黙认是None,用于识别NA/NaN的字符串,如null或空字符串等都为NaN。

keep_default_na:bool,黙认是True,在解析文件中的数据时是否包括NaN的数据,依赖于na_values参数。

na_filter:boolean,黙认是True。检测缺失值标记(空字符串或na_values中指定值)。

verbose:boolean,黙认是False。指定在非数值列中放置NA值的数量。

skip_blank_line:boolean,黙认是True。是否忽略空行。

parse_dates:boolean、整型或名称列表、列表的列表和字典,黙认False。

  • boolean,如果为True,尝试解析索引。
  • 整型或名称列表如果指定[1,2,3],尝试解析1,2,3列分别作为日期列。
  • 列表的列表如[[1,3]],联合第1列与第3列来解析一个单独的日期列。
  • 字典如{'foo':[1,3]},将列1, 3解析为日期,调用结果“foo”。

infer_datetime_format:boolean,黙认为False。如果为True并且parse_dates启用,Pandas将会自动推断列中字符中日期格式。

keep_date_col:boolean,黙认是False。如果为True且parse_dates指定了联合多列时保存原始列。

date_parser:函数,黙认是None。用来将一系列字符串列转换成datetime数组实例。黙认使用dateutil.parser.parser进行转换的。

dayfirst:boolean,黙认是False。DD/MM格式的日期。

iterator:boolean,黙认为False。返回TextFileReader这样的迭代对象。通过get_chunk()方法分片获取数据。

chunksize:int,黙认是None,返回用于迭代的TextFileReader对象。

compression:{'infer','gzip','bz2','zip','xz',None},黙认是infer,自动推断。指定文件压缩格式。

thousands:str,黙认None。千分位分隔符。

decimal:str,黙认“.”。指定识别小数点符号。

float_precision:string,黙认为None。当使用C引擎时用来指定浮点数转换器。None是普能转换,high为高精度转换,round_trip为截断转换。

lineterminator:str(长度为1),黙认为None。行终止符。

quoting:int或csv。黙认是0,黙认字段的引用行为。

doublequote:boolean,黙认True。当指定了此参数并且quoting不为QUOTE_NONE时,表示是否将字段内的两个连续的quotechar元素解释为单个quotechar元素。

escapechar:长度为1的字符串,黙认为None。引用时当quoting为QUOTE_NONE时,使用一个字符串来忽略分隔符。

comment:str,黙认是None。指定注释符号,以此符号开头的一行将被忽略。

encoding:str,黙认为None。指定读写时的文件编码。

dialect:str或csv。方言实例,黙认为None。

tuple_cols:boolean,黙认为False,自0.21.0后已弃用。

error_bad_lines:boolean,黙认True。当遇到不能解析的数据行时报错。

warn_bad_lines:boolean,黙认是True,如果error_bad_lines为False时,当遇不能解析的行时警告。

low_memory:boolean,黙认是True,当在处理文件时出内存较低时,就使用分片处理。

memory_map:boolean,黙认False。如果在filepath_or_buffer参数中指定了一个文件路径,就将这个文件映射到内存中进行处理。

 

看上去参数好多,大部分使用黙认的就好,实际使用中,只会用到其中的几个参数。

使用指定列

In [1]: data = 'col1,col2,col3\na,b,1\na,b,2\nc,d,3' # 以逗分隔的字符串来模拟csv文件

In [2]: pd.read_csv(StringIO(data)) # StringIO是将数据封装成IO对象
Out[2]: 
  col1 col2  col3
0    a    b     1
1    a    b     2
2    c    d     3

In [3]: pd.read_csv(StringIO(data), usecols=lambda x: x.upper() in ['COL1', 'COL3']) # 使用指定列
Out[3]: 
  col1  col3
0    a     1
1    a     2
2    c     3

 过滤指定行

In [4]: data = 'col1,col2,col3\na,b,1\na,b,2\nc,d,3'

In [5]: pd.read_csv(StringIO(data))
Out[5]: 
  col1 col2  col3
0    a    b     1
1    a    b     2
2    c    d     3

In [6]: pd.read_csv(StringIO(data), skiprows=lambda x: x % 2 != 0) # 忽略指定行
Out[6]: 
  col1 col2  col3
0    a    b     2

指定列类型

In [7]: data = 'a,b,c\n1,2,3\n4,5,6\n7,8,9'

In [8]: print(data)
a,b,c
1,2,3
4,5,6
7,8,9

In [9]: df = pd.read_csv(StringIO(data), dtype=object)

In [10]: df
Out[10]: 
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

In [11]: df['a'][0]
Out[11]: '1'

In [12]: df = pd.read_csv(StringIO(data), dtype={'b': object, 'c': np.float64})

In [13]: df.dtypes
Out[13]: 
a      int64
b     object
c    float64
dtype: object

读取csv文件

In [94]: print(open('tmp.csv').read())
KORD,19990127, 19:00:00, 18:56:00, 0.8100
KORD,19990127, 20:00:00, 19:56:00, 0.0100
KORD,19990127, 21:00:00, 20:56:00, -0.5900
KORD,19990127, 21:00:00, 21:18:00, -0.9900
KORD,19990127, 22:00:00, 21:56:00, -0.5900
KORD,19990127, 23:00:00, 22:56:00, -0.5900

In [95]: df = pd.read_csv('tmp.csv', header=None, parse_dates=[[1, 2], [1, 3]])

In [96]: df
Out[96]: 
                  1_2                 1_3     0     4
0 1999-01-27 19:00:00 1999-01-27 18:56:00  KORD  0.81
1 1999-01-27 20:00:00 1999-01-27 19:56:00  KORD  0.01
2 1999-01-27 21:00:00 1999-01-27 20:56:00  KORD -0.59
3 1999-01-27 21:00:00 1999-01-27 21:18:00  KORD -0.99
4 1999-01-27 22:00:00 1999-01-27 21:56:00  KORD -0.59
5 1999-01-27 23:00:00 1999-01-27 22:56:00  KORD -0.59

可以通过DataFrame中的from_csv()方法从csv文件中读取内容。

 

将数据写入到文件

可写入的文件如上部分表格中所述,我们可以简单的通过to_csv方法将DataFrame中的数据写入指定的文件中。

大家可以操作一下。