gpt4 book ai didi

python - 设置 pandas.read_table 字段和记录分隔符

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:00 26 4
gpt4 key购买 nike

我正在尝试读取一个文件,该文件在一行中使用两个冒号 (::) 来分隔字段,并使用管道来分隔记录。因此,数据文件 test.txt 可能如下所示:

testcol1::testcol2|testdata1::testdata2

而我的代码如下:

pd.read_table('test.txt', sep='::', lineterminator='|')

这会产生以下警告:

C:\Users\jordan\AppData\Local\Enthought\Canopy\User\lib\site-packages\ipykernel\__main__.py:4: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators; you can avoid this warning by specifying engine='python'.

以及以下“已解析”数据:

testcol1   testcol2|testdata1   testdata2

...具有三列、一个标题行和零个数据行。如果我添加 engine=c kwarg,我会得到以下错误:

ValueError: the 'c' engine does not support regex separators

似乎 Python 认为我的 :: 字段分隔符是正则表达式模式,因此迫使我使用不支持 lineterminator kwarg 的 Python 解析器.我如何告诉 pandas 使用 c 解析器,并为我的字段分隔符执行简单的字符串匹配而不是正则表达式匹配?

最佳答案

您可以使用速度更快的 c 引擎读取文件,因此您可以使用 lineterminator 参数,然后使用矢量化 str.split 拆分列和数据作为后处理步骤:

In [20]:
import pandas as pd
import io
t="""testcol1::testcol2|testdata1::testdata2"""
df = pd.read_csv(io.StringIO(t), lineterminator=r'|')
df

Out[20]:
testcol1::testcol2
0 testdata1::testdata2

In [37]:
df1 = df['testcol1::testcol2'].str.split('::', expand=True)
df1.columns = list(df.columns.str.split('::', expand=True)[0])
df1

Out[37]:
testcol1 testcol2
0 testdata1 testdata2

关于python - 设置 pandas.read_table 字段和记录分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755185/

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