Python pandas中read_csv參數示例詳解
1.官網語法
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()函數在pandas中用來讀取文件(逗號分隔符),並返回DataFrame。
2.參數詳解
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 ‘,'
指定分隔符。如果不指定參數,則會嘗試使用逗號分隔。分隔符長於一個字符並且不是‘\s+’,
將使用python的語法分析器。並且忽略數據中的逗號。正則表達式例子:’\r\t’
# 數據分隔轉化是逗號, 如果是其他可以指定 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'
指定行數用來作為列名,數據開始行數。
如果文件中沒有列名,則默認為0,否則設置為None。如果明確設定header=0 就會替換掉原來存在
列名。
header參數可以是一個list例如:[0,1,3],這個list表示將文件中的這些行作為列標題(意味著
每一列有多個標題),介於中間的行將被忽略掉(例如本例中的2;本例中的數據1,2,4行將被作為多
級標題出現,第3行數據將被丟棄,dataframe的數據從第5行開始)。
註意:如果skip_blank_lines=True 那麼header參數忽略註釋行和空行,所以header=0表示第一
行數據而不是文件的第一行。
# 默認系統會推斷,如果指定列名會被忽略 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
用於結果的列名列表,如果數據文件中沒有列標題行,就需要執行header=None。默認列表中不
能出現重復,除非設定參數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
用作行索引的列編號或者列名,如果給定一個序列則有多個行索引。
如果文件不規則,行尾有分隔符,則可以設定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
返回一個數據子集,該列表中的值必須可以對應到文件中的位置(數字可以對應到指定的列)或者是
字符傳為文件中的列名。例如:usecols有效參數可能是 [0,1,2]或者是 [‘foo’, ‘bar’,
‘baz’]。使用這個參數可以加快加載速度並降低內存消耗。
# 讀取部分列 pd.read_csv(data, usecols=[0,4,3]) # 按索引隻讀取指定列,順序無關 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(數據類型)
dtype: Type name or dict of column -> type, optional
每列數據的數據類型。例如 {‘a’: np.float64, ‘b’: np.int32}
pd.read_csv(data, dtype=np.float64) # 所有數據均為此數據類型 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.
使用的分析引擎。可以選擇C或者是python。C引擎快,但是Python引擎功能更加完備。
2.13 converters(列數據處理)
converters: dict, optional
列轉換函數的字典。key可以是列名或者列的序號。
from io import StringIO data = 'x,y\na,1\nb,2' def foo(p): return p+'s' # x 應用函數, 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(真值轉換)
true_values: list, optional
Values to consider as True 將指定的文本轉換為 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(假值轉換)
false_values: list, optional
Values to consider as False將指定的文本轉換為 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
需要忽略的行數(從文件開始處算起),或需要跳過的行號列表(從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(讀取行數)
nrows: int, optional
需要讀取的行數(從文件頭開始算起)。一般用於較大的數據文件
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
析數據時是否包含默認的NaN值,是否自動識別。
如果指定na_values參數,並且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
是否檢查丟失值(空字符串或者是空值)。對於大文件來說數據集中沒有空值,設定na_filter=False可以提升讀取速度。
# boolean, default True pd.read_csv(data, na_filter=False) # 不檢查
2.23 verbose(解析信息)
verbose: bool, default False
是否打印各種解析器的輸出信息,例如:“非數值列中缺失值的數量”等。
# 可以看到解析信息 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將嘗試轉換為日期類型,如果可以轉換,轉換
方法並解析。在某些情況下會快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
用於解析日期的函數,默認使用dateutil.parser.parser來做轉換。Pandas嘗試使用三種不同的方
式解析,如果遇到問題則使用下一種方式。
1.使用一個或者多個arrays(由parse_dates指定)作為參數;
2.連接指定多列字符串作為一個列作為參數;
3.每行調用一次date_parser函數來解析一個或者多個字符串(由parse_dates指定)作為參數。
# 指定時間解析庫,默認是 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 則會轉換成 2000-06-01。
pd.read_csv(data, dayfirst=True, parse_dates=[0])
2.30 cache_dates(日期緩存)
cache_dates: bool, default True
如果為 True,則使用唯一的轉換日期緩存來應用 datetime 轉換。 解析重復的日期字符串時,尤其是帶有時區偏移的日期字符串時,可能會大大提高速度。
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參數,則使用 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(小數點)
decimal: str, default ‘.'
字符中的小數點 (例如:歐洲數據使用’,‘).
pd.read_csv(data, decimal=",")
2.36 lineterminator(行結束符)
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
引號,用作標識開始和結束的字符,引號內的分割符將被忽略。
pd.read_csv(file, quotechar = '"')
2.38 quoting(引號常量)
quoting: int or csv.QUOTE_* instance, default 0
控制csv中的引號常量。可選 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
雙引號,當單引號已經被定義,並且quoting 參數不是QUOTE_NONE的時候,使用雙引號表示引號內的元素作為一個元素使用。
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
標識著多餘的行不被解析。如果該字符出現在行首,這一行將被全部忽略。這個參數隻能是一個字符,空行(就像skip_blank_lines=True)註釋行被header和skiprows忽略一樣。例如如果指定comment=’#’ 解析‘#empty\na,b,c\n1,2,3’ 以header=0 那麼返回結果將是以’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
如果一行包含太多的列,容易出現錯誤,那麼默認不會返回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: {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->‘error', ‘warn', ‘skip'}, default ‘error'
2.48 delim_whitespace(空格分隔符)
delim_whitespace: bool, default False
指定是否將空格(例如’‘或’\ t’)用作分隔符。 等效於設置sep =’\s+’。 如果此選項設置為True,則不應該為delimiter參數傳遞任何內容。
pd.read_csv(StringIO(data), delim_whitespace=False)
2.49 low_memory(低內存)
low_memory: bool, default True
分塊加載到內存,再低內存消耗中解析。但是可能出現類型混淆。確保類型不被混淆需要設置為False。或者使用dtype 參數指定類型。註意使用chunksize 或者iterator 參數分塊讀入會將整個文件讀入到一個Dataframe,而忽略類型(隻能在C解析器中有效)
pd.read_csv(StringIO(data), low_memory=False)
2.50 memory_map(內存映射)
memory_map: bool, default False
如果使用的文件在內存內,那麼直接map文件使用。使用這種方式可以避免文件再次進行IO操作。
pd.read_csv('gr.csv', low_memory=False)
2.51 float_precison(高精度轉換)
float_precision:str, optional
指定C引擎應使用哪個轉換器進行浮點運算,對於普通轉換器,選項為“None”或“high”,原始低精度轉換器的“legacy”,以及 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,以訪問壓縮檔案中的數據,文件的本地緩存等。 要在本地緩存上面的示例,可以增加參數配置:
# 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”參數用於實現的“ s3”部分,而不是用於緩存實現。 請註意,僅在會話期間緩存到臨時目錄,但是您也可以指定永久存儲。更多參數可參考fsspec文檔
註:pandas 1.3.0 新增。
從fsspec未處理的遠程URL(例如HTTP和HTTPS)讀取時,傳遞到存儲的字典將用於創建請求中包含的頭()。這可用於控制用戶代理標頭(User-Agent header)或發送其他自定義標頭。例如:
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.
參考鏈接:
1.https://www.gairuo.com/p/pandas-read-csv
總結
到此這篇關於Python pandas中read_csv參數詳解的文章就介紹到這瞭,更多相關pandas read_csv參數詳解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python數據處理pandas讀寫操作IO工具CSV解析
- python中pandas.read_csv()函數的深入講解
- Python Pandas讀取csv/tsv文件(read_csv,read_table)的區別
- Python pandas讀取CSV文件的註意事項(適合新手)
- Python中的pandas表格模塊、文件模塊和數據庫模塊