1. Pandas 之 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操作.
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 文件写入
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 行.