pandas.read_csv(),带有分隔符和quotechar



问题

我有一个管道分隔的数据集,其中一些值中也有管道。这些元素由两侧的\包围,表示它们之间的管道不应用作分隔符。原始数据看起来像:

Col1|Col2|Col3
1|some text|more text
2|some text|more text
3|\text with a | in it\|more text
4|\a|b|c\|more text

我想把这些读到熊猫数据帧中,这样它看起来像:

更多文本更多文本更多文本
Col1Col2Col3
1一些文本
2一些文本
3带有|的文本
4a|b|c更多文本

不幸的是;"echar";参数限制为一个字符。在你的情况下,你有两个。

您可以做的是预处理文件内容,用另一个字符替换\,例如规范的双引号"

import io
path = 'test.csv'
with open(path) as f:
df = pd.read_csv(io.StringIO(f.read().replace(r'\', '"')), sep='|')
print(df)

输出:

Col1       Col2  Col3
1            some text  more text   NaN
2            some text  more text   NaN
3  text with a | in it  more text   NaN
4                a|b|c  more text   NaN

注意。除了标题之外,每行末尾都有一个额外的|,这是预期的吗

quotechar='\'不适用于您的原因是quotechar假设任何长于一个字符的参数都是正则表达式。

我会尝试用一个反斜杠替换双反斜杠。也许可以试试这样的东西:

from io import StringIO
import pandas as pd
doubleslash = r"\"
with open("test.csv", newline="") as f:
file = StringIO(f.read().replace(doubleslash, "\"))
frame = pd.read_csv(file, delimiter="|", quotechar="\")
print(frame)

请注意,我们必须将双反斜杠定义为原始字符串,并且我们正在对quotechar和replacement char字段中的反斜杠进行转义。

您可以在此处看到类似的问题:https://stackoverflow.com/a/60902745/18375093

相关内容

  • 没有找到相关文章

最新更新