我注意到使用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/