我偶然发现了一个问题,到目前为止,我显然还没有找到任何可靠的解决方案。我有一个"管道分隔"格式的.txt文件,如下所示。
GUEST_NAME PROFILE_ID FULL_ADD IS_TOTAL P_MONTH
ANDREW J 223345 ANNA BUILDING, 2335 01-APR-2019
327 PERIAR, CHENNAI
P BASU 334567 Times Square,
Level 2 B Wing,
Andheri Kurla Road Mumbai 400059 4335 31-AUG-2019
以上只是一个片段。
如您所见,第二行"凸出",并创建了另外两列。当我使用pandas
阅读此.txt时,我收到如下错误。
df = pd.read_csv('path to txt filefile.txt',sep='|')
ParserError: Error tokenizing data. C error: Expected 5 fields in line 2,
saw 7
为了解决这个问题,我找到了两种可能的出路
在
pd.read_csv()
中使用error_bad_lines
- 这将删除第 2 行。这不是想要的使用以下阅读方法
df = pd.read_csv(filepathfile.txt',sep='|',names=list(range(0,7)))
这也不是一个很好的解决方案,因为它会再创建 2 列。
我正在寻找一种解决方法,通过这种方法,这些"凸起的行"安装在右列内。考虑到上面的示例,生成的df
应如下所示
GUEST_NAME PROFILE_ID FULL_ADD IS_TOTAL P_MONTH
ANDREW J 223345 ANNA BUILDING, 2335 01-APR-2019
327 PERIAR, CHENNAI
P BASU 334567 Times Square,
Level 2 B Wing,
Andheri Kurla Road
Mumbai 400059 4335 31-AUG-2019
关于如何实现这一目标的任何线索?请注意,实际上有 100 列,上述"凸出"可能发生在任何内容string
的列上。
不久前我遇到了类似的问题,发现遵循这里的建议特别有助于 engine=python; 所以可能值得尝试:
df = pd.read_csv(filename,header=None,engine='python',sep='|')
。我知道这可能不是最佳答案,只是让你知道什么对我有用。
我以前解决这个问题的另一种方法是,我发现如果我以 excel 格式保存文件,并使用pd.read_excel而不是pd.read_csv没有问题(即使我同意这不应该真正产生影响,再次只是以前对我有用的东西(。