1.官網(wǎng)語法
pandas.read_csv(filepath_or_buffer, sep=NoDefault.no_default**,** delimiter=None**,** header='infer’, names=NoDefault.no_default**,** index_col=None**,** usecols=None**,** squeeze=False**,** prefix=NoDefault.no_default**,** 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=’.', lineterminator=None**,** quotechar=’"', quoting=0**,** doublequote=True**,** escapechar=None**,** comment=None**,** encoding=None**,** encoding_errors='strict’, dialect=None**,** error_bad_lines=None**,** warn_bad_lines=None**,** on_bad_lines=None**,** delim_whitespace=False**,** low_memory=True**,** memory_map=False**,** float_precision=None**,** storage_options=None**)**
read_csv()函數(shù)在pandas中用來讀取文件(逗號分隔符),并返回DataFrame。
2.參數(shù)詳解
2.1 filepath_or_buffer(文件)
注:不能為空
filepath_or_buffer: str, path object or file-like object
設置需要訪問的文件的有效路徑。
可以是URL,可用URL類型包括:http, ftp, s3和文件。
對于多文件正在準備中本地文件讀取實例:??/localhost/path/to/table.csv
# 本地相對路徑:
pd.read_csv('data/data.csv') # 注意目錄層級
pd.read_csv('data.csv') # 如果文件與代碼文件在同目錄下
pd.read_csv('data/my/my.data') # CSV 文件擴展名不一定是 csv
# 本地絕對路徑:
pd.read_csv('/user/data/data.csv')
2.2 sep(分隔符)
sep: str, default ‘,’
? 指定分隔符。如果不指定參數(shù),則會嘗試使用逗號分隔。分隔符長于一個字符并且不是‘\s+’,
將使用python的語法分析器。并且忽略數(shù)據(jù)中的逗號。正則表達式例子:’\r\t’
# 數(shù)據(jù)分隔轉(zhuǎn)化是逗號, 如果是其他可以指定
pd.read_csv(data, sep='\t') # 制表符分隔 tab
pd.read_table(data) # read_table 默認是制表符分隔 tab
pd.read_csv(data, sep='|') # 制表符分隔 tab
pd.read_csv(data,sep="(?<!a)\|(?!1)", engine='python') # 使用正則
2.3 delimiter(分隔符)
delimiter: str, default None
? 定界符,sep的別名。
2.4 header(表頭)
header: int, list of int, default ‘infer’
指定行數(shù)用來作為列名,數(shù)據(jù)開始行數(shù)。
如果文件中沒有列名,則默認為0,否則設置為None。如果明確設定header=0 就會替換掉原來存在
列名。
header參數(shù)可以是一個list例如:[0,1,3],這個list表示將文件中的這些行作為列標題(意味著
每一列有多個標題),介于中間的行將被忽略掉(例如本例中的2;本例中的數(shù)據(jù)1,2,4行將被作為多
級標題出現(xiàn),第3行數(shù)據(jù)將被丟棄,dataframe的數(shù)據(jù)從第5行開始)。
注意:如果skip_blank_lines=True 那么header參數(shù)忽略注釋行和空行,所以header=0表示第一
行數(shù)據(jù)而不是文件的第一行。
# 默認系統(tǒng)會推斷,如果指定列名會被忽略
pd.read_csv(data, header=0) # 第一行
pd.read_csv(data, header=None) # 沒有表頭
pd.read_csv(data, header=[0,1,3]) # 多層索引 MultiIndex
2.5 names(列名)
names: array-like, optional
? 用于結(jié)果的列名列表,如果數(shù)據(jù)文件中沒有列標題行,就需要執(zhí)行header=None。默認列表中不
能出現(xiàn)重復,除非設定參數(shù)mangle_dupe_cols=True。
pd.read_csv(data, names=['列1', '列2']) # 指定列名列表
2.6 index_col(索引列)
index_col: int, str, sequence of int / str, or False, default None
用作行索引的列編號或者列名,如果給定一個序列則有多個行索引。
如果文件不規(guī)則,行尾有分隔符,則可以設定index_col=False 來是的pandas不適用第一列作為行
索引。
# 默認為 `None`, 不自動識別索引
pd.read_csv(data, index_col=False) # 不再使用首列作為索引
pd.read_csv(data, index_col=0) # 第幾列是索引
pd.read_csv(data, index_col='年份') # 指定列名
pd.read_csv(data, index_col=['a','b']) # 多個索引
pd.read_csv(data, index_col=[0, 3]) # 按列索引指定多個索引
2.7 usecols(使用部分列)
usecols: list-like or callable, optional
返回一個數(shù)據(jù)子集,該列表中的值必須可以對應到文件中的位置(數(shù)字可以對應到指定的列)或者是
字符傳為文件中的列名。例如:usecols有效參數(shù)可能是 [0,1,2]或者是 [‘foo’, ‘bar’,
‘baz’]。使用這個參數(shù)可以加快加載速度并降低內(nèi)存消耗。
# 讀取部分列
pd.read_csv(data, usecols=[0,4,3]) # 按索引只讀取指定列,順序無關(guān)
pd.read_csv(data, usecols=['列1', '列5']) # 按列名,列名必須存在
# 指定列順序,其實是 df 的篩選功能
pd.read_csv(data, usecols=['列1', '列5'])[['列5', '列1']]
# 以下用 callable 方式可以巧妙指定順序, in 后邊的是我們要的順序
pd.read_csv(data, usecols=lambda x: x.upper() in ['COL3', 'COL1'])
2.8 squeeze(返回序列)
squeeze: bool, default False
如果文件值包含一列,則返回一個Series,如果是多個列依舊還是DataFrame。
# 只取一列會返回一個 Series
pd.read_csv(data, usecols=[0], squeeze=True)
# 如果是兩列則還是 df
pd.read_csv(data, usecols=[0, 2], squeeze=True)
2.9 prefix(表頭前綴)
prefix: str, optional
在沒有列標題時,給列添加前綴。例如:添加‘X’ 成為 X0, X1, …
# 表頭為 c_0、c_2
pd.read_csv(data, prefix='c_', header=None)
2.10 mangle_dupe_cols(處理重復列名)
mangle_dupe_cols: bool, default True
重復的列,將‘X’…’X’表示為‘X.0’…’X.N’。如果設定為False則會將所有重名列覆蓋。
data = 'a,b,a\n0,1,2\n3,4,5'
pd.read_csv(StringIO(data), mangle_dupe_cols=True)
# 表頭為 a b a.1
# False 會報 ValueError 錯誤
2.11 dtype(數(shù)據(jù)類型)
dtype: Type name or dict of column -> type, optional
每列數(shù)據(jù)的數(shù)據(jù)類型。例如 {‘a(chǎn)’: np.float64, ‘b’: np.int32}
pd.read_csv(data, dtype=np.float64) # 所有數(shù)據(jù)均為此數(shù)據(jù)類型
pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的類型
pd.read_csv(data, dtype=[datetime, datetime, str, float]) # 依次指定
2.12 engine(引擎)
engine: {‘c’, ‘python’}, optional
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
使用的分析引擎??梢赃x擇C或者是python。C引擎快,但是Python引擎功能更加完備。
2.13 converters(列數(shù)據(jù)處理)
converters: dict, optional
列轉(zhuǎn)換函數(shù)的字典。key可以是列名或者列的序號。
from io import StringIO
data = 'x,y\na,1\nb,2'
def foo(p):
return p+'s'
# x 應用函數(shù), y 使用 lambda
pd.read_csv(StringIO(data), converters={'x': foo,
'y': lambda x: x*3})
# 輸出:
x y
0 as 111
1 bs 222
# 使用列索引
pd.read_csv(StringIO(data),
converters={0: foo, 1: lambda x: x*3})
2.14 true_values(真值轉(zhuǎn)換)
true_values: list, optional
Values to consider as True 將指定的文本轉(zhuǎn)換為 True
, 可以用列表指定多個值。
from io import StringIO
data = ('a,b,c\n1,Yes,2\n3,No,4')
pd.read_csv(StringIO(data),
true_values=['Yes'], false_values=['No'])
# 輸出
a b c
0 1 True 2
1 3 False 4
2.15 false_values(假值轉(zhuǎn)換)
false_values: list, optional
Values to consider as False將指定的文本轉(zhuǎn)換為 False
, 可以用列表指定多個值。
2.16 skipinitialspace(忽略分隔符后的空白)
skipinitialspace: bool, default False
忽略分隔符后的空白(默認為False,即不忽略).
data = 'a, b, c\n 1, 2, 3\n 4 ,5, 6'
pd.read_csv(StringIO(data), skipinitialspace=True)
# 輸出
a b c
0 1 2 3
1 4 5 6
2.17 skiprows(跳過指定行)
skiprows: list-like, int or callable, optional
需要忽略的行數(shù)(從文件開始處算起),或需要跳過的行號列表(從0開始)。
# 跳過前2行
pd.read_csv(data, skiprows=2)
# 跳過前2行
pd.read_csv(data, skiprows=range(2))
# 跳過指定行
pd.read_csv(data, skiprows=[24,234,141])
# 跳過指定行
pd.read_csv(data, skiprows=np.array([2, 6, 11]))
# 隔行跳過
pd.read_csv(data, skiprows=lambda x: x % 2 != 0)
2.18 shipfooter(尾部跳過)
skipfooter: int, default 0
從文件尾部開始忽略。 (c引擎不支持)
pd.read_csv(filename, skipfooter=1) # 最后一行不加載
2.19 nrows(讀取行數(shù))
nrows: int, optional
需要讀取的行數(shù)(從文件頭開始算起)。一般用于較大的數(shù)據(jù)文件
pd.read_csv(data, nrows=1000)
2.20 na_values(空值替換)
na_values: scalar, str, list-like, or dict, optional
一組用于替換NA/NaN的值。如果傳參,需要制定特定列的空值。默認為‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
# 5 和 5.0 會被認為 NaN
pd.read_csv(data, na_values=[5])
# ? 會被認為 NaN
pd.read_csv(data, na_values='?')
# 空值為 NaN
pd.read_csv(data, keep_default_na=False, na_values=[""])
# 字符 NA 字符 0 會被認為 NaN
pd.read_csv(data, keep_default_na=False, na_values=["NA", "0"])
# Nope 會被認為 NaN
pd.read_csv(data, na_values=["Nope"])
# a、b、c 均會被認為 NaN 等于 na_values=['a','b','c']
pd.read_csv(data, na_values='abc')
# 指定列的指定值會被認為 NaN
pd.read_csv(data, na_values={'c':3, 1:[2,5]})
2.21 keep_fault_na(保留默認空值)
keep_default_na: bool, default True
析數(shù)據(jù)時是否包含默認的NaN值,是否自動識別。
如果指定na_values參數(shù),并且keep_default_na=False,那么默認的NaN將被覆蓋,否則添加。
# 不自動識別空值
pd.read_csv(data, keep_default_na=False)
keep_default_na | na_values | 邏輯 |
---|---|---|
True | 指定 | na_values 的配置附加處理 |
True | 未指定 | 自動識別 |
False | 指定 | 使用 na_values 的配置 |
False | 未指定 | 不做處理 |
注:如果
na_filter
為 False (默認是 True), 那么 keep_default_na 和 na_values parameters 均無效。
2.22 na_filter(丟失值檢查)
na_filter: bool, default True
是否檢查丟失值(空字符串或者是空值)。對于大文件來說數(shù)據(jù)集中沒有空值,設定na_filter=False可以提升讀取速度。
# boolean, default True
pd.read_csv(data, na_filter=False) # 不檢查
2.23 verbose(解析信息)
verbose: bool, default False
是否打印各種解析器的輸出信息,例如:“非數(shù)值列中缺失值的數(shù)量”等。
# 可以看到解析信息
pd.read_csv(data, verbose=True)
# Tokenization took: 0.02 ms
# Type conversion took: 0.36 ms
# Parser memory cleanup took: 0.01 ms
2.24 skip_blank_lines(跳過空行)
skip_blank_lines: bool, default True
如果為True,則跳過空行;否則記為NaN。
# 不跳過空行
pd.read_csv(data, skip_blank_lines=False)
2.25 parse_dates(日期時間解析)
parse_dates: bool or list of int 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"
pd.read_csv(data, parse_dates=True) # 自動解析日期時間格式
pd.read_csv(data, parse_dates=['年份']) # 指定日期時間字段進行解析
# 將 1、4 列合并解析成名為 時間的 時間類型列
pd.read_csv(data, parse_dates={'時間':[1,4]})
2.26 infer_datetime_format(自動識別日期時間)
infer_datetime_format: bool, default False
如果設定為True并且parse_dates 可用,那么pandas將嘗試轉(zhuǎn)換為日期類型,如果可以轉(zhuǎn)換,轉(zhuǎn)換
方法并解析。在某些情況下會快5~10倍。
pd.read_csv(data, parse_dates=True, infer_datetime_format=True)
2.27 keep_date_col(保留被時間組合列)
keep_date_col: bool, default False
如果有多列解析成一個列,自動會合并到新解析的列,去掉此列,如果設置為 True 則會保留。
pd.read_csv(data, parse_dates=[[1, 2], [1, 3]], keep_date_col=True)
2.28 date_parser(日期時間解析器)
date_parser: function, optional
用于解析日期的函數(shù),默認使用dateutil.parser.parser來做轉(zhuǎn)換。Pandas嘗試使用三種不同的方
式解析,如果遇到問題則使用下一種方式。
1.使用一個或者多個arrays(由parse_dates指定)作為參數(shù);
2.連接指定多列字符串作為一個列作為參數(shù);
3.每行調(diào)用一次date_parser函數(shù)來解析一個或者多個字符串(由parse_dates指定)作為參數(shù)。
# 指定時間解析庫,默認是 dateutil.parser.parser
date_parser=pd.io.date_converters.parse_date_time
date_parser=lambda x: pd.to_datetime(x, utc=True, format='%d%b%Y')
date_parser = lambda d: pd.datetime.strptime(d, '%d%b%Y')
pd.read_csv(data, parse_dates=['年份'], date_parser=date_parser)
2.29 dayfirst(日期日在前)
dayfirst: bool, default False
DD/MM格式的日期類型,如日期 2000-01-06 如果 dayfirst=True 則會轉(zhuǎn)換成 2000-06-01。
pd.read_csv(data, dayfirst=True, parse_dates=[0])
2.30 cache_dates(日期緩存)
cache_dates: bool, default True
如果為 True,則使用唯一的轉(zhuǎn)換日期緩存來應用 datetime 轉(zhuǎn)換。 解析重復的日期字符串時,尤其是帶有時區(qū)偏移的日期字符串時,可能會大大提高速度。
pd.read_csv(data, cache_dates=False)
2.31 iterator(讀取文件對象)
iterator: bool, default False
返回一個TextFileReader 對象,以便逐塊處理文件。
pd.read_csv(data, iterator=True)
2.32 chunksize(文件塊)
chunksize: int, optional
文件塊的大小, See IO Tools docs for more informationon iterator and chunksize.
pd.read_csv(data, chunksize=100000)
# 分片處理大文件
df_iterator=pd.read_csv(file,chunksize=50000)
def process_dataframe(df):
pass
return processed_df
for index,df_tmp in enumerate(df_iterator):
df_processed=process_dataframe(df_tmp)
if index>0:
df_processed.to_csv(path)
else:
df_processed.to_csv(path,mode='a',header=False)
2.33 compression(壓縮)
compression: {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
直接使用磁盤上的壓縮文件。如果使用infer參數(shù),則使用 gzip, bz2, zip或者解壓文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’這些為后綴的文件,否則不解壓。如果使用zip,那么ZIP包中國必須只包含一個文件。設置為None則不解壓。
新版本0.18.1版本支持zip和xz解壓
pd.read_csv('sample.tar.gz', compression='gzip')
2.34 thousands(千分位分隔符)
thousands: str, optional
千分位分割符,如“,”或者“."
pd.read_csv('test.csv', thousands=',') # 逗號分隔
2.35 decimal(小數(shù)點)
decimal: str, default ‘.’
字符中的小數(shù)點 (例如:歐洲數(shù)據(jù)使用’,‘).
pd.read_csv(data, decimal=",")
2.36 lineterminator(行結(jié)束符)
lineterminator: str (length 1), optional
行分割符,只在C解析器下使用。
data = 'a,b,c~1,2,3~4,5,6'
pd.read_csv(StringIO(data), lineterminator='~')
2.37 quotechar(引號)
quotechar: str (length 1), optional
引號,用作標識開始和結(jié)束的字符,引號內(nèi)的分割符將被忽略。
pd.read_csv(file, quotechar = '"')
2.38 quoting(引號常量)
quoting: int or csv.QUOTE_* instance, default 0
控制csv中的引號常量??蛇x QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
import csv
pd.read_csv('input_file.csv', quoting=csv.QUOTE_NONE)
2.39 doublequote(雙引號)
doublequote: bool, default True
雙引號,當單引號已經(jīng)被定義,并且quoting 參數(shù)不是QUOTE_NONE的時候,使用雙引號表示引號內(nèi)的元素作為一個元素使用。
import csv
pd.read_csv('data.csv', quotechar='"', doublequote=True, quoting=csv.QUOTE_NONNUMERIC)
2.40 escapechar(不受分隔符限制)
escapechar: str (length 1), optional
當quoting 為QUOTE_NONE時,指定一個字符使的不受分隔符限值。
pd.read_csv(StringIO(data), escapechar='\\', encoding='utf-8')
2.41 comment(注釋標識)
comment: str, optional
標識著多余的行不被解析。如果該字符出現(xiàn)在行首,這一行將被全部忽略。這個參數(shù)只能是一個字符,空行(就像skip_blank_lines=True)注釋行被header和skiprows忽略一樣。例如如果指定comment=’#’ 解析‘#empty\na,b,c\n1,2,3’ 以header=0 那么返回結(jié)果將是以’a,b,c’作為header。
s = '# notes\na,b,c\n# more notes\n1,2,3'
pd.read_csv(StringIO(s), sep=',', comment='#', skiprows=1)
2.42 encoding(編碼)
encoding: str, optional
指定字符集類型,通常指定為’utf-8’. List of Python standard encodings
pd.read_csv('gairuo.csv', encoding='utf8')
pd.read_csv("gairuo.csv",encoding="gb2312") # 常見中文
# 其他常用編碼 ISO-8859-1 latin-1 gbk
2.43 encoding_errors
encoding_errors: str, optional, default “strict”
2.44 dialect
dialect: str or csv.Dialect, optional
如果沒有指定特定的語言,如果sep大于一個字符則忽略。具體查看csv.Dialect 文檔
import csv
csv.register_dialect(
'mydialect',
delimiter = ',',
quotechar = '"',
doublequote = True,
skipinitialspace = True,
lineterminator = '\r\n',
quoting = csv.QUOTE_MINIMAL)
pd.read_csv("gr.csv", encoding="gbk", dialect='mydialect')
2.45 error_bad_lines(壞行處理)
error_bad_lines: bool, default None
如果一行包含太多的列,容易出現(xiàn)錯誤,那么默認不會返回DataFrame ,如果設置成false,那么會將"壞行"剔除(只能在C解析器下使用)。
pd.read_csv(StringIO(data), error_bad_lines=False)
2.46 warn_bad_lines(壞行警告)
warn_bad_lines: bool, default None
如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”將會被輸出(只能在C解析器下使用)。
pd.read_csv(StringIO(data), warn_bad_lines=False)
2.47 on_bad_lines
on_bad_lines: {‘error’, ‘warn’, ‘skip’}, default ‘error’
2.48 delim_whitespace(空格分隔符)
delim_whitespace: bool, default False
指定是否將空格(例如’‘或’\ t’)用作分隔符。 等效于設置sep =’\s+’。 如果此選項設置為True,則不應該為delimiter參數(shù)傳遞任何內(nèi)容。
pd.read_csv(StringIO(data), delim_whitespace=False)
2.49 low_memory(低內(nèi)存)
low_memory: bool, default True
分塊加載到內(nèi)存,再低內(nèi)存消耗中解析。但是可能出現(xiàn)類型混淆。確保類型不被混淆需要設置為False?;蛘呤褂胐type 參數(shù)指定類型。注意使用chunksize 或者iterator 參數(shù)分塊讀入會將整個文件讀入到一個Dataframe,而忽略類型(只能在C解析器中有效)
pd.read_csv(StringIO(data), low_memory=False)
2.50 memory_map(內(nèi)存映射)
memory_map: bool, default False
如果使用的文件在內(nèi)存內(nèi),那么直接map文件使用。使用這種方式可以避免文件再次進行IO操作。
pd.read_csv('gr.csv', low_memory=False)
2.51 float_precison(高精度轉(zhuǎn)換)
float_precision:str, optional
指定C引擎應使用哪個轉(zhuǎn)換器進行浮點運算,對于普通轉(zhuǎn)換器,選項為“None”或“high”,原始低精度轉(zhuǎn)換器的“l(fā)egacy”,以及 round-trip 換器的“ round_trip”。
val = '0.3066101993807095471566981359501369297504425048828125'
data = 'a,b,c\n1,2,{0}'.format(val)
abs(pd.read_csv(StringIO(data), engine='c',float_precision='high')['c'][0] - float(val))
2.52 storage_options(存儲選項)
storage_options:dict, optional
注:pandas 1.2.0 新增。
fsspec 還允許使用復雜的URL,以訪問壓縮檔案中的數(shù)據(jù),文件的本地緩存等。 要在本地緩存上面的示例,可以增加參數(shù)配置:
# Amazon S3, 安裝支持庫 fsspec
pd.read_csv(
"simplecache::s3://ncei-wcsd-archive/data/processed/SH1305/18kHz/"
"SaKe2013-D20130523-T080854_to_SaKe2013-D20130523-T085643.csv",
storage_options={"s3": {"anon": True}},
)
指定“anon”參數(shù)用于實現(xiàn)的“ s3”部分,而不是用于緩存實現(xiàn)。 請注意,僅在會話期間緩存到臨時目錄,但是您也可以指定永久存儲。更多參數(shù)可參考fsspec文檔
注:pandas 1.3.0 新增。
從fsspec未處理的遠程URL(例如HTTP和HTTPS)讀取時,傳遞到存儲的字典將用于創(chuàng)建請求中包含的頭()。這可用于控制用戶代理標頭(User-Agent header)或發(fā)送其他自定義標頭。例如:
headers = {"User-Agent": "pandas"}
df = pd.read_csv(
"https://download.bls.gov/pub/time.series/cu/cu.item",
sep="\t",
storage_options=headers
)
3.返回值
DataFrame or TextParser
???A comma-separated values (csv) file is returned as two-dimensional data structure with labeled axes.
參考鏈接:文章來源:http://www.zghlxwxcb.cn/news/detail-435099.html
1.https://www.gairuo.com/p/pandas-read-csv文章來源地址http://www.zghlxwxcb.cn/news/detail-435099.html
到了這里,關(guān)于pandas中的read_csv參數(shù)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!