簡體   English   中英

如何轉義pandas to_csv中的escapechar

[英]How to escape the escapechar in pandas to_csv

我正在嘗試將數據幀寫入 CSV。許多傳入數據是用戶生成的,可能包含特殊字符。 我可以設置escapechar='\\' (例如),但是如果數據中有反斜杠,它會被寫為"\" ,這會被解釋為轉義雙引號,而不是包含反斜杠的字符串。 我如何轉義 escapechar(即,我如何讓 to_csv 將\\寫成 escaping 反斜杠?)

示例代碼:

import pandas as pd
import io, csv

data = [[1, "\\", "text"]] 
df = pd.DataFrame(data)

sIo = io.StringIO()
df.to_csv(
    sIo,
    index=False,
    sep=',',
    header=False,
    quoting=csv.QUOTE_MINIMAL,
    doublequote=False,
    escapechar='\\'
)
sioText = sIo.getvalue()
print(sioText)

實際 output:

1,"\",text

我需要的:

1,"\\",text

創建約束的工程用例是,這將是將數據從一個系統移動到另一個系統的一些核心代碼。 我不會事先知道數據的格式,也不會對其進行太多控制(任何列都可以包含轉義字符),而且我無法控制另一側的轉義字符,因此實際的 output 將是讀為錯誤。 因此,最初的問題是“如何轉義轉義字符”。

作為參考,此參數在 pandas 文檔中的定義是:

escapecharstr, default None
String of length 1. Character used to escape sep and quotechar when appropriate.

對於遇到此問題的任何人,我通過使用 Pandas 的正則表達式替換器解決了這個問題:

df = df.replace('\\\\', '\\\\\\\\', regex=True)

每個最終斜杠需要 4 個斜杠,因為我們正在做 2 層 escaping。一層用於文字 Python 字符串,另一層用於在正則表達式中轉義它們。 這將查找替換數據框中任何列中的任何\ ,它們出現在字符串中的任何位置。

令我難以置信的是,這仍然是默認行為。

嗯。 對於從 pandas 到 csv 的往返數據,這似乎是一個未解決的問題。 請參閱此問題: https://github.com/pandas-dev/pandas/issues/14122 ,尤其是 pandas 創建者 Wes McKinney 的帖子

此行為存在於 csv 模塊https://gist.github.com/wesm/7763d396ae25c701e5276ae25c701e5258 從第一原則看來,應該轉義有問題的反斜杠。 如果我手動將文件編輯為

"a" "Hello. Please \"help\" me. I cannot quote a csv.\\"

然后 read_csv 返回原始輸入

我擺弄了 R ,它似乎並沒有做得更好

> df <- data.frame(a=c("Hello. Please \"help\" me. I cannot quote a csv.\\"))> write,table(df, sep=',', qmethod='e'. row.names=F) "a" "Hello. Please \"help\" me. I cannot quote a csv.\"

CSV 不是高保真數據交換工具的另一個例子 =|

我和你一樣困惑,這不起作用,但似乎官方 position 是...... df[col]=df[col].str.replace({"\\": "\\\\"}) ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM