我正在尝试读取一个文件,它连续使用两个冒号(::)来分隔字段,并使用管道来分隔记录.所以,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] 举报,一经查实,本站将立刻删除。