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!

推薦閱讀: