[英]Preserve escaped characters when reading csv with pandas read_csv
[英].read_csv() in pandas isn't reading escape characters properly
我正在嘗試使用 Pandas 和 CSV 數據創建 ETL 管道,但我在使用某些轉義字符時遇到了一些問題。
例如,如果我的數據是 '\\"' 並且定義的轉義字符是 '\\' 和引用字符 '"',那么當我讀取文件時,我的數據變成了“\\”,缺少一個轉義字符。
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
import pandas as pd
import csv
escape_char_defined = '\\'
quote_defined = '"'
separator = "|"
sample_data = []
for i in range(1,11):
sample_data.append(i*escape_char_defined + quote_defined)
initial_df = pd.DataFrame(sample_data,columns=['column'])
csv_text = initial_df.to_csv(sep=separator,columns=None,header=None,index=False,doublequote=False,quoting=csv.QUOTE_ALL,quotechar=quote_defined,escapechar=escape_char_defined,encoding='utf-8')
csv_text = StringIO(csv_text)
final_df = pd.read_csv(csv_text,sep=separator,escapechar=escape_char_defined,quoting=csv.QUOTE_ALL,header=None,doublequote=False,encoding='utf-8')
if not final_df.equals(initial_df):
raise Exception("Dataframes are not equal!")
我不認為這是預期的行為,因為我使用相同的工具來編寫和讀取 CSV 文本。
有沒有人已經有這個問題?
如果我正確理解您的需要,這里是固定代碼。
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
import pandas as pd
import csv
escape_char_defined = "\\"
quote_defined = '"'
separator = "|"
sample_data = []
for i in range(1,11):
sample_data.append(i*escape_char_defined + quote_defined)
initial_df = pd.DataFrame(sample_data,columns=['column'])
csv_text = initial_df.to_csv(sep=separator,columns=None,quoting=csv.QUOTE_NONE,header=None,index=False,doublequote=False,quotechar=quote_defined,escapechar=escape_char_defined)
csv_text = StringIO(csv_text)
final_df = pd.read_csv(csv_text,names=(["column"]),sep=separator,quoting=csv.QUOTE_NONE,escapechar=escape_char_defined,quotechar=quote_defined,header=None,doublequote=False)
if not final_df.equals(initial_df):
raise Exception("Dataframes are not equal!")
我已經用quoting=csv.QUOTE_ALL
替換了pd.to_csv()
和pd.read_csv()
中的quoting=csv.QUOTE_NONE
。
選項csv.QUOTE_NONE
阻止作者引用字段。 如果當前分隔符存在於輸出數據中,則前面是當前轉義字符。 如果未設置,則在遇到任何需要轉義的字符時,編寫器將引發錯誤。
在 pd.read_csv() 我還添加了列名作為'column'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.