在 Pandas 中读取带有空行的 CSV 文件

4

我有一个像这样的data.csv文件

Col1,Col2,Col3,Col4,Col5  
10,12,14,15,16  
18,20,22,24,26  
28,30,32,34,36  
38,40,42,44,46  
48,50,52,54,56

Col6,Col7  
11,12  
13,14  
...

现在,我只想读取列Col1到Col5的数据,不需要Col6和Col7。
我尝试使用以下方法读取此文件:
df = pd.read_csv('data.csv',header=0)

然后它会抛出一个错误,说
UnicodeDecodeError : 'utf-8' codec cant decode byte 0xb2 in position 3: invalid start byte

然后,我尝试了这个。
df = pd.read_csv('data.csv',header=0,error_bad_lines=True)

但这样还不能得到期望的结果。我们如何只读取csv文件中的第一行空白行之前的内容?


你尝试过使用 encoding = 'utf-16' 吗? - Acccumulation
在我看来,问题出在文件上。它不是有效的CSV文件,而是两个CSV文件合并成一个。尝试将文件分成两个文件。 - rje
2个回答

5

您可以创建一个逐行读取文件的生成器。结果会传递给 pandas

import pandas as pd
import io


def file_reader(filename):
    with open(filename) as f:
        for line in f:
            if line and line != '\n':
                yield line
            else:
                break


data = io.StringIO(''.join(file_reader('data.csv')))
df = pd.read_csv(data)

2

Pandas没有停止在某个条件的选项,但它有停止在n行后的条件。因此,您可以先读取文件,计算直到空白的行数,然后使用Pandas加载。

pd.read_csv('file.csv',nrows= count )

类似于这样:

count = 0
with open(filename) as f:
    for line in f:
        if line and line != '\n':
            count += 1
        else:
            break

pd.read_csv(filename,nrows=count)

有很多文件需要读取,@Christian Sloper。因此,在每个文件中计算行数将非常困难。 - Bhaskar
这个注释有点难理解,你需要在将程序片段加载到pandas之前进行计数。 - Christian Sloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接