问题
我有一个管道分隔的数据集,其中一些值中也有管道。这些元素由两侧的\
包围,表示它们之间的管道不应用作分隔符。原始数据看起来像:
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
我想把这些读到熊猫数据帧中,这样它看起来像:
Col1 | Col2 | Col3 |
---|---|---|
1 | 一些文本 | 更多文本|
2 | 一些文本 | 更多文本|
3 | 带有|的文本 | 更多文本|
4 | a|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