Python - pandas 之 csv 文件读取与写入

1. Pandas 之 CSV 文件读取

pandas.read_csv

pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], 
                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, 
                cache_dates=True, 
                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, 
                error_bad_lines=True, 
                warn_bad_lines=True, 
                delim_whitespace=False, 
                low_memory=True, 
                memory_map=False, 
                float_precision=None)

功能:

读取CSV(逗号分隔符)文件到DataFrame.

另外,还支持选择性迭代(optionally iterating) 和文件分块导入(breaking of the file
into chunks).

部分参数说明:

[1] - filepath_or_buffer : 文件路径,也可以是URL,如:http, ftp, s3和文件.

[2] - sep : 分隔符,默认是逗号.

[3] - delimiter : 字符串值,备选分隔符,默认为 None.

[4] - header : 整数值或者整数值列表. 默认为 ‘infer’. 指定行数用来作为列名和数据开始行数. 如果文件中没有列名,则默认为0.

[5] - index_col : 整数值或字符串值或整数值/字符串值的序列或False,默认为None.用作行索引的列编号或者列名;如果是一个序列则有多个行索引.

[6] - usecols : 返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名. 例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]. 使用这个参数可以加快加载速度并降低内存消耗.

[7] - dtype : 每列数据的数据类型. 如 {‘a’: np.float64, ‘b’: np.int32}

[8] - engine : {‘c’, ‘python’}, 使用的分析引擎, 可以选择C或python. C引擎快但是Python引擎功能更加完备.

[9] - converters : dict 值. 列转换函数的字典. key可以是列名或者列的序号.

[10] - nrows : 整数值. 需要读取的行数(从文件头开始算起). 适用于读取大文件的一部分数据块.

[11] - iterator: 布尔值,返回 TextFileReader 对象以用于迭代.

[12] - chunksize : 整数值. 文件块的大小. 返回 TextFileReader 对象以用于迭代.
文件块的大小, See IO Tools docs for more informationon iterator and chunksize.

[13] - encoding : 指定字符编码类型,通常为'utf-8'.

[14] - low_memory : 布尔值,默认为 True. 分块加载到内存,再低内存消耗中解析. 但是可能出现类型混淆. 确保类型不被混淆需要设置为False. 或者使用dtype 参数指定类型. 注: 使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效).

[15] - memory_map : 布尔值,默认为 False. 如果文件已经在内存里,直接 map 文件使用. 可以避免文件再次进行IO操作.

参考: pandas.read_csv参数详解

1.1. 大文件读取

默认时,在读取很大的 csv 文件时,会出现内存错误或者加载较慢的问题. 可以采用 chunksize 来分块读取文件的数据.

如:

import pandas as pd
 
#每次读取10条数据
csv_reader = pd.read_csv("test.csv",chunksize=10)
for chunk in scv_reader: #chunk为一个DataFrame
    print(chunk.shape)

或者,在csv文件读取时,read_csv 加入 iterator=True, 再调 get_chunk(number). 其中,number 为读取的数据条数.

如:

import pandas as pd

chunks = pd.read_csv('test.csv',iterator=True)
chunk = chunks.get_chunk(10)#读取前10行.

2. Pandas 之 CSV 文件写入

pandas.DataFrame.to_csv

DataFrame.to_csv(path_or_buf=None, 
                 sep=', ', 
                 na_rep='', 
                 float_format=None, 
                 columns=None, 
                 header=True, 
                 index=True, 
                 index_label=None, 
                 mode='w', 
                 encoding=None, 
                 compression=None, 
                 quoting=None, 
                 quotechar='"', 
                 line_terminator='\n', 
                 chunksize=None, 
                 tupleize_cols=False, 
                 date_format=None, 
                 doublequote=True, 
                 escapechar=None, 
                 decimal='.', 
                 **kwds)

功能

数据写入 csv 文件.

csv 文件模型逗号(“,”) 作分隔符.

部分参数:

[1] - path_or_buf:文件名、文件具体、相对路径、文件流等

[2] - sep:文件分割符号

[3] - na_rep:将NaN转换为特定值

[4] - columns:选择部分列写入

[5] - header:忽略列名

[6] - index:False则选择不写入索引

[7] - chunksize:一次写入的行数.

用法:

import pandas as pd 
import numpy as np

df = pd.DataFrame(
    {'R':range(255),
     'G':list("ggg"),
     'B':['blue1',np.NaN,'bule2']})
print(df)

df.to_csv("test.csv",sep='-') #分隔符设为'-'
df.to_csv("test.csv",na_rep='NULL') #NaN 替换为 NULL
df.to_csv("test.csv", header=None) #不写入列头名
df.to_csv("test.csv",index=False) #不写索引
df.to_csv("test.csv",columns=['R','G']) #仅写入部分列
df.to_csv("test.csv",chunksize=2) #一次写入 2 行.
Last modification:August 6th, 2019 at 12:20 pm

Leave a Comment