读取带有垃圾值的坏csv文件

2024-06-26 09:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用pandas阅读一个csv文件,该文件的格式如下:

    atrrth
    sfkjbgksjg
    airuqghlerig
    Name         Roll
    airuqgorqowi
    awlrkgjabgwl
    AAA          67
    BBB          55
    CCC          07

如您所见,如果我使用pd.read_csv,就会得到一个相当明显的错误:

^{pr2}$

但我希望把所有的数据放到一个数据帧中。使用error_bad_lines = False将删除重要内容并只保留垃圾值

以下是2个可能的列名:

Name : [Name , NAME , Name of student] 
Roll : [Rollno , Roll , ROLL]

如何做到这一点?在


Tags: 文件csv数据namepandas格式rollbbb
3条回答

打开csv文件,找到列名起始的行:

with open(r'data.csv') as fp:
    skip = next(filter(
        lambda x: x[1].startswith(('Name','NAME')),
        enumerate(fp)
    ))[0]

该值将存储在skip参数中

^{pr2}$

在Python3.X中工作

我想建议对@RahulAgarwal's answer稍作修改/简化。您可以继续将同一个流直接加载到pandas中,而不是关闭并重新打开文件。您不必记录要跳过的行数,而是可以记录标题行并手动拆分以提供列名:

with open(r'data.csv') as fp:
    names = next(line for line in fp if line.casefold().lstrip().startswith('name'))
    df = pd.read_csv(fp, names=names.strip().split())

这对于具有大量垃圾桶线的文件具有优势。在

更详细的检查可以是这样的:

^{pr2}$

但在这个函数中,任何可能的垃圾行都会被跳过。您可以将其用作过滤器:

names = next(line for line in fp if isheader(line))

如果这确实是一个结构(而不仅仅是一个可以得到哪种垃圾的例子),您可以简单地使用skiprows参数来指示应该跳过多少行。换句话说,您应该这样读取数据帧:

import pandas as pd

df = pd.read_csv('your.csv', skiprows=3)

请注意,skiprows可以做得更多。检查文件。在

相关问题 更多 >