pandas.read_csv#

pandas.read_csv(filepath_or_buffer, *, sep=<no_default>, delimiter=None, header='infer', names=<no_default>, index_col=None, usecols=None, 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, skip_blank_lines=True, parse_dates=None, date_format=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, on_bad_lines='error', low_memory=True, memory_map=False, float_precision=None, storage_options=None, dtype_backend=<no_default>)[原始碼]#

將逗號分隔值 (csv) 檔案讀取到 DataFrame 中。

還支援可選地迭代或將檔案分塊。

更多幫助可以在 IO Tools 的線上文件中找到。

引數:
filepath_or_bufferstr, path object or file-like object

任何有效的字串路徑都可以接受。字串可以是一個 URL。有效的 URL 方案包括 http, ftp, s3, gs 和 file。對於檔案 URL,需要主機。本地檔案可以是:file:///path/to/table.csv

如果要傳入路徑物件,pandas 接受任何 os.PathLike

透過“檔案類物件”,我們指的是具有 read() 方法的物件,例如檔案控制代碼(例如透過內建 open 函式)或 StringIO

sepstr, default ‘,’

用作分隔符的字元或正則表示式。如果 sep=None,C 引擎無法自動檢測分隔符,但 Python 解析引擎可以,這意味著後者將被使用,並透過 Python 內建的嗅探器 csv.Sniffer 自動從檔案的第一個有效行中檢測分隔符。此外,長度超過 1 個字元且與 '\s+' 不同的分隔符將被解釋為正則表示式,並且還將強制使用 Python 解析引擎。請注意,正則表示式分隔符容易忽略帶引號的資料。正則表示式示例:'\r\t'

delimiterstr, optional

sep 的別名。

headerint, Sequence of int, ‘infer’ 或 None, default ‘infer’

包含列標籤並標記資料開始的行號(從零開始)。預設行為是推斷列名:如果沒有傳遞 names,則行為與 header=0 相同,並且列名從檔案的第一行推斷;如果明確將列名傳遞給 names,則行為與 header=None 相同。顯式傳遞 header=0 以便能夠替換現有名稱。header 可以是一個整數列表,指定用於列上 MultiIndex 的行位置,例如 [0, 1, 3]。未指定的中間行將被跳過(例如,此示例中的 2 被跳過)。請注意,此引數會忽略註釋行和空行(如果 skip_blank_lines=True),因此 header=0 表示資料的第一行,而不是檔案的第一行。

當從檔案內容推斷時,透過將重複的名稱重新命名為以 1 開頭的數字字尾(例如 ".{{count}}")來區分各個標頭,例如 "foo""foo.1"。空標頭將被命名為 "Unnamed: {{i}}" 或在 MultiIndex 列的情況下命名為 "Unnamed: {{i}}_level_{{level}}"

namesSequence of Hashable, optional

要應用的列標籤序列。如果檔案包含標頭行,則應顯式傳遞 header=0 以覆蓋列名。此列表中的重複項是不允許的。

index_colHashable, Sequence of Hashable 或 False, optional

用作行標籤的列,透過列標籤或列索引表示。如果給出了標籤或索引的序列,則將為行標籤形成 MultiIndex

注意:index_col=False 可用於強制 pandas 將第一列用作索引,例如,當您有一個檔案格式錯誤,每行末尾都有分隔符時。

usecolsSequence of Hashable 或 Callable, optional

要選擇的列的子集,透過列標籤或列索引表示。如果為列表狀,所有元素必須是位置性的(即文件列中的整數索引)或字串,這些字串對應於使用者在 names 中提供或從文件標頭行推斷出的列名。如果給出了 names,則不考慮文件標頭行。例如,有效的列表狀 usecols 引數將是 [0, 1, 2]['foo', 'bar', 'baz']。元素順序被忽略,因此 usecols=[0, 1][1, 0] 相同。要使用元素順序保留從 data 例項化 DataFrame,請使用 pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']] 來按 ['foo', 'bar'] 順序排列列,或使用 pd.read_csv(data, usecols=['foo', 'bar'])[['bar', 'foo']] 來按 ['bar', 'foo'] 順序排列。

如果為可呼叫物件,則可呼叫函式將針對列名進行評估,在可呼叫函式評估為 True 的地方返回名稱。有效可呼叫引數的一個示例將是 lambda x: x.upper() in ['AAA', 'BBB', 'DDD']。使用此引數可以大大加快解析時間並降低記憶體使用。

dtypedtype 或 dict of {{Hashabledtype}}, optional

應用於整個資料集或單個列的資料型別。例如,{{'a': np.float64, 'b': np.int32, 'c': 'Int64'}} 使用 strobject 結合合適的 na_values 設定可以保留 dtype 而不進行解釋。如果指定了 converters,則它們將被應用於 *代替* dtype 轉換。將 defaultdict 作為輸入,其中預設值決定了未顯式列出的列的 dtype

engine{{‘c’, ‘python’, ‘pyarrow’}}, optional

要使用的解析器引擎。C 和 pyarrow 引擎速度更快,而 Python 引擎目前功能更完整。多執行緒目前僅受 pyarrow 引擎支援。 “pyarrow”引擎的某些功能不受支援或可能無法正常工作。

convertersdict of {{HashableCallable}}, optional

用於轉換指定列中值的函式。鍵可以是列標籤或列索引。

true_valueslist, optional

除大小寫不敏感的“True”變體外,還將哪些值視為 True

false_valueslist, optional

除大小寫不敏感的“False”變體外,還將哪些值視為 False

skipinitialspacebool, default False

跳過分隔符後的空格。

skiprowsint, list of int 或 Callable, optional

要跳過的行號(從零開始)或在檔案開頭要跳過的行數(int)。

如果為可呼叫物件,則可呼叫函式將針對行索引進行評估,如果該行應被跳過,則返回 True,否則返回 False。有效可呼叫引數的一個示例將是 lambda x: x in [0, 2]

skipfooterint, default 0

要跳過檔案底部的行數(使用 engine='c' 時不支援)。

nrowsint, optional

要從檔案中讀取的行數。有助於讀取大檔案的部分。指的是返回的 DataFrame 中的資料行數,不包括

  • 包含列名的標頭行。

  • 標頭行之前的行,如果 header=1 或更大。

示例用法

  • 讀取前 999,999 行(非標頭):read_csv(..., nrows=999999)

  • 讀取第 1,000,000 行到第 1,999,999 行:read_csv(..., skiprows=1000000, nrows=999999)

na_valuesHashable, Iterable of Hashable 或 dict of {{HashableIterable}},

optional 附加字串,用於將它們識別為 NA/NaN。如果傳遞了 dict,則為每列指定 NA 值。預設情況下,以下值被解釋為 NaN:空字串、“NaN”、“N/A”、“NULL”以及其他常見的缺失資料表示。

keep_default_nabool, default True

在解析資料時是否包含預設的 NaN 值。根據是否傳遞了 na_values,行為如下:

  • 如果 keep_default_naTrue,並且指定了 na_values,則 na_values 將被追加到用於解析的預設 NaN 值中。

  • 如果 keep_default_naTrue,並且未指定 na_values,則只使用預設的 NaN 值進行解析。

  • 如果 keep_default_naFalse,並且指定了 na_values,則只使用 na_values 中指定的 NaN 值進行解析。

  • 如果 keep_default_naFalse,並且未指定 na_values,則不會將任何字串解析為 NaN

請注意,如果 na_filter 被設定為 False,則 keep_default_nana_values 引數將被忽略。

na_filterbool, default True

檢測缺失值標記(空字串和 na_values 的值)。在沒有 NA 值的 資料中,傳遞 na_filter=False 可以提高讀取大檔案的效能。

skip_blank_linesbool, default True

如果為 True,則跳過空行,而不是將其解釋為 NaN 值。

parse_datesbool, None, list of Hashable, default None

行為如下

  • bool。如果為 True -> 嘗試解析索引。

  • None。如果指定了 date_format,則行為與 True 相同。

  • list of int 或名稱。例如,如果 [1, 2, 3] -> 嘗試將列 1、2、3 分別解析為日期列。

如果某一列或索引無法表示為 datetime 陣列,例如由於存在無法解析的值或時區的混合,則該列或索引將保持不變,作為 object 資料型別返回。對於非標準 datetime 解析,請在 read_csv() 之後使用 to_datetime()

注意:對於 iso8601 格式的日期,存在快速通道。

date_formatstr 或 dict of column -> format, optional

parse_dates 結合使用時,用於解析日期和/或時間的格式。strftime 用於解析時間,例如 "%d/%m/%Y"。有關選項,請參閱 strftime 文件,但請注意,"%f"` 將解析到納秒級別。您也可以傳遞

  • “ISO8601”,用於解析任何 ISO8601 時間字串(不一定是完全相同的格式);

  • “mixed”,用於單獨推斷每個元素的格式。這有風險,您可能應該與 dayfirst 一起使用。

版本 2.0.0 中已新增。

dayfirstbool, default False

DD/MM 格式日期,國際和歐洲格式。

cache_datesbool, default True

如果為 True,則使用唯一、已轉換日期的快取來應用 datetime 轉換。在解析重複日期字串(尤其是帶有時區偏移的字串)時,可能會顯著提速。

iteratorbool, default False

返回 TextFileReader 物件以進行迭代或使用 get_chunk() 獲取塊。

chunksize整數,可選

每塊要從檔案中讀取的行數。傳遞一個值將導致函式返回一個 TextFileReader 物件用於迭代。有關 iteratorchunksize 的更多資訊,請參閱 IO Tools 文件

compressionstr or dict, default ‘infer’

用於磁碟資料的即時解壓縮。如果為 ‘infer’ 且 ‘filepath_or_buffer’ 是類路徑,則從以下副檔名檢測壓縮:‘.gz’、‘.bz2’、‘.zip’、‘.xz’、‘.zst’、‘.tar’、‘.tar.gz’、‘.tar.xz’ 或 ‘.tar.bz2’(否則無壓縮)。如果使用 ‘zip’ 或 ‘tar’,ZIP 檔案必須只包含一個要讀取的資料檔案。設定為 None 表示不解壓縮。也可以是包含鍵 'method' 的字典,其值設定為 {'zip', 'gzip', 'bz2', 'zstd', 'xz', 'tar'},其他鍵值對將被轉發到 zipfile.ZipFilegzip.GzipFilebz2.BZ2Filezstandard.ZstdDecompressorlzma.LZMAFiletarfile.TarFile。例如,可以使用自定義壓縮字典為 Zstandard 解壓縮傳遞以下內容:compression={'method': 'zstd', 'dict_data': my_compression_dict}

thousandsstr (length 1), optional

用作數值中千位分隔符的字元。

decimalstr (length 1), default ‘.’

用於識別小數點(例如,歐洲資料使用“,”)。

lineterminatorstr (length 1), optional

用於表示換行的字元。僅在使用 C 解析器時有效。

quotecharstr (length 1), optional

用於表示帶引號項的開始和結束的字元。帶引號的項可以包含 delimiter,並且將被忽略。

quoting{{0 or csv.QUOTE_MINIMAL, 1 or csv.QUOTE_ALL,

2 or csv.QUOTE_NONNUMERIC, 3 or csv.QUOTE_NONE}}, default csv.QUOTE_MINIMAL 根據 csv.QUOTE_* 常量控制欄位的引用行為。預設是 csv.QUOTE_MINIMAL(即 0),這意味著只有包含特殊字元的欄位才會被引用(例如,quotechardelimiterlineterminator 中定義的字元)。

doublequotebool, default True

當指定了 quotecharquoting 不是 QUOTE_NONE 時,指示欄位內部兩個連續的 quotechar 元素是否被解釋為單個 quotechar 元素。

escapecharstr (length 1), optional

用於轉義其他字元的字元。

commentstr (length 1), optional

指示行其餘部分不應被解析的字元。如果出現在行開頭,則整行將被完全忽略。此引數必須是單個字元。與空行一樣(只要 skip_blank_lines=True),完全註釋的行會被 header 引數忽略,但不會被 skiprows 引數忽略。例如,如果 comment='#',使用 header=0 解析 #empty\na,b,c\n1,2,3 將導致 'a,b,c' 被視為標頭。

encodingstr, 可選, 預設為 ‘utf-8’

UTF 編碼,用於讀取/寫入(例如 'utf-8')。Python 標準編碼列表

encoding_errorsstr, optional, default ‘strict’

如何處理編碼錯誤。可能的取值列表

dialectstr 或 csv.Dialect, optional

如果提供,此引數將覆蓋以下引數的值(預設值或非預設值):delimiterdoublequoteescapecharskipinitialspacequotecharquoting。如果需要覆蓋值,將發出 ParserWarning。有關更多詳細資訊,請參閱 csv.Dialect 文件。

on_bad_lines{{‘error’, ‘warn’, ‘skip’}} 或 Callable, default ‘error’

指定遇到錯誤行(欄位過多)時要執行的操作。允許的值包括:

  • 'error',在遇到錯誤行時引發異常。

  • 'warn',在遇到錯誤行時引發警告並跳過該行。

  • 'skip',在遇到錯誤行時跳過,不引發異常或警告。

  • Callable,用於處理單個錯誤行的函式。
    • 使用 engine='python' 時,函式簽名如下:(bad_line: list[str]) -> list[str] | Nonebad_line 是一個由 sep 分割的字串列表。如果函式返回 None,則將忽略錯誤行。如果函式返回一個比預期元素多的新字串 list,則在丟棄多餘元素時會發出 ParserWarning

    • 使用 engine='pyarrow' 時,函式簽名如 pyarrow 文件所述:invalid_row_handler

版本 2.2.0 中更改: engine='pyarrow' 的 Callable。

low_memorybool, default True

在內部將檔案分塊處理,從而降低解析時的記憶體使用量,但可能導致型別推斷混合。為了確保沒有混合型別,請將 False,或使用 dtype 引數指定型別。請注意,整個檔案仍會讀取到一個 DataFrame 中,請使用 chunksizeiterator 引數以塊的形式返回資料。(僅在使用 C 解析器時有效)。

memory_mapbool, default False

如果為 filepath_or_buffer 提供了檔案路徑,則將檔案物件直接對映到記憶體,並直接從中訪問資料。使用此選項可以提高效能,因為不再存在 I/O 開銷。

float_precision{{‘high’, ‘legacy’, ‘round_trip’}}, optional

指定 C 引擎應為浮點值使用的轉換器。選項包括 None'high' 表示普通轉換器,'legacy' 表示原始的低精度 pandas 轉換器,以及 'round_trip' 表示往返轉換器。

storage_optionsdict, optional

對於特定儲存連線有意義的額外選項,例如主機、埠、使用者名稱、密碼等。對於 HTTP(S) URL,鍵值對將作為標頭選項轉發到 urllib.request.Request。對於其他 URL(例如,以“s3://”和“gcs://”開頭),鍵值對將轉發到 fsspec.open。有關更多詳細資訊,請參閱 fsspecurllib,有關儲存選項的更多示例,請參閱 此處

dtype_backend{{‘numpy_nullable’, ‘pyarrow’}}

應用於結果 DataFrame 的後端資料型別(仍處於實驗階段)。如果未指定,則預設行為是不使用可為空的資料型別。如果指定,行為如下:

版本 2.0 中已新增。

返回:
DataFrame 或 TextFileReader

逗號分隔值 (csv) 檔案被返回為具有標籤軸的二維資料結構。

另請參閱

DataFrame.to_csv

將 DataFrame 寫入逗號分隔值 (csv) 檔案。

read_table

將通用分隔檔案讀取到 DataFrame 中。

read_fwf

將固定寬度格式化行表讀取到 DataFrame 中。

示例

>>> pd.read_csv("data.csv")
   Name  Value
0   foo      1
1   bar      2
2  #baz      3

可以透過 index_colheader 引數指定索引和標頭。

>>> pd.read_csv("data.csv", header=None)
      0      1
0  Name  Value
1   foo      1
2   bar      2
3  #baz      3
>>> pd.read_csv("data.csv", index_col="Value")
       Name
Value
1       foo
2       bar
3      #baz

列型別會根據需要推斷,但可以使用 dtype 引數顯式指定。

>>> pd.read_csv("data.csv", dtype={{"Value": float}})
   Name  Value
0   foo    1.0
1   bar    2.0
2  #baz    3.0

True、False、NA 值和千位分隔符都有預設值,但也可以顯式指定。提供您想要作為字串或字串列表的值!

>>> pd.read_csv("data.csv", na_values=["foo", "bar"])
   Name  Value
0   NaN      1
1   NaN      2
2  #baz      3

可以使用 comment 引數跳過輸入檔案中的註釋行。

>>> pd.read_csv("data.csv", comment="#")
  Name  Value
0  foo      1
1  bar      2

預設情況下,包含日期的列將作為 object 而不是 datetime 讀取。

>>> df = pd.read_csv("tmp.csv")
>>> df
   col 1       col 2            col 3
0     10  10/04/2018  Sun 15 Jan 2023
1     20  15/04/2018  Fri 12 May 2023
>>> df.dtypes
col 1     int64
col 2    object
col 3    object
dtype: object

可以使用 parse_datesdate_format 引數將特定列解析為日期。

>>> df = pd.read_csv(
...     "tmp.csv",
...     parse_dates=[1, 2],
...     date_format={{"col 2": "%d/%m/%Y", "col 3": "%a %d %b %Y"}},
... )
>>> df.dtypes
col 1             int64
col 2    datetime64[ns]
col 3    datetime64[ns]
dtype: object