如何处理大熊猫中的多值lineterminators

Dav*_*542 4 python csv python-3.x pandas

我有\x02\n一个csv文件中的行终止符,我正在尝试解析.但是,我不能在pandas中使用两个字符,它只允许一个,例如:

>>> data = pd.read_csv(file, sep="\x01", lineterminator="\x02")
>>> data.loc[100].tolist()
['\n1475226000146', '1464606', 'Juvenile', '1', 'http://itunes.apple.com/artist/juvenile/id1464606?uo=5', '1']
Run Code Online (Sandbox Code Playgroud)

要么:

data = pd.read_csv(file, sep="\x01", lineterminator="\n")
 >>> data.loc[100].tolist()
['1475226000146', '1464606', 'Juvenile', '1', 'http://itunes.apple.com/artist/juvenile/id1464606?uo=5', '1\x02']
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以看到\n没有正确切断.使用上面的分隔符读取pandas中的csv文件的最佳方法是什么?

cs9*_*s95 5

从v0.23开始,pandas不支持多字符行终止符.您的代码目前返回:

s = "this\x01is\x01test\x02\nthis\x01is\x01test2\x02"
df = pd.read_csv(
    pd.compat.StringIO(s), sep="\x01", lineterminator="\x02", header=None)

df
        0   1      2
0    this  is   test
1  \nthis  is  test2
Run Code Online (Sandbox Code Playgroud)

您唯一的选择(截至目前)是从第一列中删除前导空格.你可以这样做str.lstrip.

df.iloc[:, 0] = df.iloc[:, 0].str.lstrip()
# Alternatively,
# df.iloc[:, 0] = [s.lstrip() for s in df.iloc[:, 0]]

df

      0   1      2
0  this  is   test
1  this  is  test2
Run Code Online (Sandbox Code Playgroud)

如果你必须处理剥离多个其他类型的行终止符(除了换行符之外),你可以传递它们的字符串:

line_terminators = ['\n', ...]
df.iloc[:, 0] = df.iloc[:, 0].str.lstrip(''.join(line_terminators))
Run Code Online (Sandbox Code Playgroud)