gpt4 book ai didi

python - pandas 中的 .read_csv() 无法正确读取转义字符

转载 作者:行者123 更新时间:2023-12-01 08:16:57 30 4
gpt4 key购买 nike

我正在尝试使用 pandas 创建 ETL 管道并对数据进行 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,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!")

我已将 pd.to_csv()pd.read_csv() 中的 quoting=csv.QUOTE_ALL 替换为 引用=csv.QUOTE_NONE

选项csv.QUOTE_NONE阻止编写器引用字段。如果当前分隔符出现在输出数据中,则前面是当前转义字符。如果未设置,如果遇到任何需要转义的字符,编写器将引发错误。

在 pd.read_csv() 中,我还将列名称添加为 'column'

关于python - pandas 中的 .read_csv() 无法正确读取转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926706/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com