微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试读取一个文件,它连续使用两个冒号(::)来分隔字段,并使用管道来分隔记录.所以,datafile 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认为我的:: field分隔符是一个正则表达式模式,因此迫使我使用Python解析器,它不支持lineterminator kwarg.我如何告诉pandas使用c解析器,并为我的字段分隔符进行简单的字符串匹配而不是正则表达式匹配?

解决方法:

您可以使用c引擎读取文件,这将更快,因此您可以使用lineterminator参数,然后使用vectorised 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐