有一个奇怪的.csv文件,类似于:
header1,header2,header3
val11,val12,val13
val21,val22,val23
val31,val32,val33
非常好,但是在这些行之后,总是有一个空行,后面跟着许多无用的行。整个东西就是一些行:
header1,header2,header3
val11,val12,val13
val21,val22,val23
val31,val32,val33
dhjsakfjkldsa
fasdfggfhjhgsdfgds
gsdgffsdgfdgsdfgs
gsdfdgsg
底部的行数是完全随机的,唯一需要注意的是它们前面的空行。
Pandas有一个参数“skipfooter”,用于忽略页脚中已知的行数。
知道如何忽略这些行而不实际打开(open()...)文件并删除它们吗?
3条答案
按热度按时间ego6inou1#
read_csv
函数没有取第一个空行来终止的选项,本模块不能根据需要的条件接受/拒绝行,只能忽略空行(可选)或不符合数据形成形状的行(分隔符较多的行)。您可以通过以下方法规范化数据(无需解析文件-pure
pandas
):1.知道所需的\trash数据行数。[手动]
pd.read_csv('file.csv', nrows=3)
或pd.read_csv('file.csv', skipfooter=4)
1.通过删除
DataFrame
中的其他数据来保留所需数据。[自动]df.dropna(axis=0, how='any', inplace=True)
结果将是:
ycl3bljg2#
解决方案:
说明:
使用panda原生函数来实现这一点的最佳方法是参数和函数调用的组合--有点混乱,但绝对可行!
首先,使用
skip_blank_lines=False
调用read_csv
,因为缺省值是True
。然后,使用
isnull
或isna
方法创建一个 * 仅包含 * 空行的 Dataframe 。这是通过 * 定位 *(.loc
)所有值都为空/空的索引来实现的。通过利用这个 Dataframe 保留原始索引的事实,您可以获得第一个空行的索引。
因为这使用了索引,所以您还需要检查csv中是否确实有空行。最后,您只需将原始 Dataframe “切片”以删除不需要的行。
p3rjfoxz3#
如果您使用的是
csv
模块,那么检测一个空行是非常简单的。