當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python Pandas DataFrame to_csv方法用法及代碼示例

Pandas DataFrame.to_csv(~) 方法將源 DataFrame 轉換為逗號分隔值格式。

參數

1.path_or_buf | stringfile handle | optional

寫入 csv 的路徑。默認情況下,csv 以字符串形式返回。

2. sep | string 長度為 1 | optional

要使用的分隔符。默認情況下,sep=","

3. na_rep | string | optional

用於替換源 DataFrame 中的 NaN 的值。

4. float_format | string | optional

浮點數的格式字符串。

5. columns | sequence | optional

要包含的列的標簽。所有其他列都將從生成的 csv 中排除。默認情況下,所有列都包含在生成的 csv 中。

6. header | booleanliststring | optional

是否在 csv 中包含列標簽。如果傳遞字符串列表,那麽這些字符串將覆蓋現有的列標簽。默認情況下,header=True

7. index | boolean | optional

是否在 csv 中包含行標簽。默認情況下,index=True

8. index_label | stringsequenceFalseNone | optional

要使用的列標簽。默認情況下,index_label=None

9. mode | string | optional

打開文件的模式。默認情況下, mode="w" ,代表寫入模式。

10.encoding | string | optional

寫入文件時使用的編碼。默認情況下,encoding="utf-8"

11.compression | stringdict | optional

要使用的壓縮算法。允許的值如下:

"infer" "gzip" "bz2" "zip" "xz"

默認情況下, compression="infer" ,這意味著如果為 path_or_buf 提供了路徑,則將從您附加的擴展名推斷出壓縮算法。例如,如果 path_or_buf"my_data.zip" ,則將使用 "zip" 壓縮。如果未提供擴展名,則不會進行壓縮。

12.quoting | optional

默認情況下,quoting=csv.QUOTE_MINIMAL

13.quotechar | string 長度為 1 | optional

當一個值恰好包含分隔符時,該值將被錯誤地分割。您可以使用 quotechar 包裝您的值,以防止發生此類不必要的拆分。默認情況下,'"'

14.line_terminator | string | optional

用於指示換行符的字符。默認為 os.linesep

15.chunksize | intNone | optional

一次寫入的行數。如果您的 DataFrame 很大,則使用較大的塊大小(例如 10000 )可能會帶來更好的性能。默認情況下,chunksize=None

16.date_format | string | optional

日期時間對象的格式字符串。

17.doublequote | boolean | optional

是否解析 quotechar 。默認情況下,doublequote=True

18.escapechar | string | optional

用於轉義雙引號的字符。默認情況下,escapechar=None

19.decimal | string | optional

表示小數點的字符。默認情況下,decimal="." 。該參數的存在是因為法國等一些歐洲國家使用 , 來表示小數點。

返回值

如果指定path_or_buf,則返回None。否則,返回一個字符串。

例子

將 csv 寫入文件

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

要將 df 保存為 CSV 文件:

df.to_csv(path_or_buf="my_data")

輸出的文件my_data與Python腳本位於同一目錄,如下:

,A,B
a,3,5
b,4,6

將 csv 寫入字符串

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

要將 df 保存為 csv 字符串,請不要指定 path_or_buf

df.to_csv()



',A,B\na,3,5\nb,4,6\n'

請注意,打印此內容將使 \n 生效:

print(df.to_csv())



,A,B
a,3,5
b,4,6

指定float_format

考慮以下包含浮點數的DataFrame:

df = pd.DataFrame({"A":[3.00005,4],"B":[5,6]}, index=["a","b"])
df



   A        B
a  3.00005  54.00000  6

為了格式化浮點數(例如要包含多少個小數位),我們使用float_format參數。其語法遵循 Python 標準字符串格式化程序的語法,我們在此詳細介紹。

例如,最多包含 3 位小數:

df.to_csv(float_format="%.3f")



',A,B\na,3.000,5\nb,4.000,6\n'

指定列

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

默認情況下,所有列都包含在生成的 csv 中。要僅包含特定列,請指定其列標簽,如下所示:

print(df.to_csv(columns=["A"]))



,A
a,3
b,4

指定標題

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

默認情況下, header=True ,這意味著標頭包含在生成的 csv 中:

print(df.to_csv())   # header=True



,A,B
a,3,5
b,4,6

要排除標頭,請設置header=False,如下所示:

print(df.to_csv(header=False))



a,3,5
b,4,6

我們還可以傳遞新列標簽的列表,如下所示:

print(df.to_csv(header=["C","D"]))



,C,D
a,3,5
b,4,6

指定index_label

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

默認情況下, index_label=None ,這意味著將包含一個空索引標簽:

print(df.to_csv())



,A,B
a,3,5
b,4,6

請注意我們在這裏如何以逗號開頭 - 索引標簽為空,但它仍然包含在內。

要刪除索引名稱,請設置index_label=False,如下所示:

print(df.to_csv(index_label=False))



A,B
a,3,5
b,4,6

某些統計軟件(例如 R)可能會發現這種格式更易於解析。

指定引號字符

考慮以下 DataFrame :

df = pd.DataFrame({"A":["3,9",4], "B":[5,6]}, index=["a","b"])
df



   A    B
a  3,9  54    6

在這裏,請注意我們的值之一是 "3,9" ,不幸的是它包含默認分隔符 , 。如果我們將其轉換為 csv,我們最終會在第一行中得到 3,9,5,這是不正確的,因為它表明我們在這一行中有 3 個值而不是 2 個。

為了表明 3,9 是一個單一值,to_csv(~) 方法默認用引號 ( " ) 括起來:

df.to_csv(sep=",")



',A,B\na,"3,9",5\nb,4,6\n'

請注意我們現在有"3,9"

我們可以通過傳入 quotechar 來指定單個字符作為包裝器,而不是 " ,如下所示:

df.to_csv(quotechar="@")



',A,B\na,@3,9@,5\nb,4,6\n'

指定line_terminator

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  54  6

默認情況下,每行使用換行符 ( \n ) 進行分割:

df.to_csv()



',A,B\na,3,5\nb,4,6\n'

我們可以通過傳入 line_terminator 使用自定義字符來分割行:

df.to_csv(line_terminator="@")



',A,B@a,3,5@b,4,6@'

指定雙引號和轉義字符

考慮以下 DataFrame :

df = pd.DataFrame({"A":['3"9',4],"B":[5,6]}, index=["a","b"])
df



   A    B
a  3"9  5
b  4    6

請注意 df 如何包含帶有單雙引號 " 的值。

默認情況下, doublequote=True ,這意味著 quotechar 是重複的,如下所示:

print(df.to_csv())



,A,B
a,"3""9",5
b,4,6

在此,請注意以下事項:

  • 最初的輸出是 "3"9" ,其中外部的 "" 表明該值是一個字符串。

  • 這裏的問題是,該值實際上包含",因此這會導致語法錯誤,因為"3"9"不是有效的字符串。

  • 為了克服這個問題,該方法使用 quotechar 轉義中間的 " ,默認情況下(令人困惑的是) "

  • 結果,我們最終得到了 peculiar-looking "3""9"

我們可以通過設置 doublequote=False 來關閉字符串包裝在 "" 中的行為,然後提供 escapechar 參數:

print(df.to_csv(doublequote=False, escapechar="@"))



,A,B
a,3@"9,5
b,4,6

此處,需要 escapechar,因為單獨的 "39 是無效語法 - " 表示字符串的開頭,並且沒有結束 "escapechar的作用是表明"與字符串完全無關。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | to_csv method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。