我注意到使用read_excel / read_csv时pandas很聪明,它会跳过空行,因此如果我的输入中有空白行,例如


Col1, Col2
Value1, Value2


它只是有效,但是有没有办法获得实际的跳过行数? (在这种情况下为1)

我想将数据框行号绑定回原始输入文件的行号。

最佳答案

您可以使用skip_blank_lines=False并导入整个文件,包括空行。然后,您可以检测到它们,对它们进行计数并过滤掉它们:

def custom_read(f_name, **kwargs):
    df = pd.read_csv(f_name, skip_blank_lines=False, **kwargs)

    non_empty = df.notnull().all(axis=1)
    print('Skipped {} blank lines'.format(sum(~non_empty)))

    return df.loc[non_empty, :]




您还可以使用csv.reader逐行导入文件,并且仅允许非空行:

import csv

def custom_read2(f_name):
    with open(f_name) as f:
        cont = []
        empty_counts = 0

        reader = csv.reader(f, delimiter=',')
        for row in reader:
            if len(row) > 0:
                cont.append(row)
            else:
                empty_counts += 1
        print('Skipped {} blank lines'.format(empty_counts))
        return pd.DataFrame(cont)


据我所知,一次最多只能有一个空白行占用您的内存。如果您碰巧有很多包含许多空行的大文件,这可能会很有用,但是我敢肯定,在实践中,选项1始终是更好的选择

关于python - 解析时获取 Pandas 中跳过的空行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57187667/

10-12 17:01