Pandas:在读取管道分隔文件时如何处理不同数量的列



我偶然发现了一个问题,到目前为止,我显然还没有找到任何可靠的解决方案。我有一个"管道分隔"格式的.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

为了解决这个问题,我找到了两种可能的出路

  1. pd.read_csv()中使用error_bad_lines- 这将删除第 2 行。这不是想要的

  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没有问题(即使我同意这不应该真正产生影响,再次只是以前对我有用的东西(。

最新更新