【问题标题】:Erase blank rows while reading csv file读取 csv 文件时擦除空白行
【发布时间】:2017-07-27 09:27:10
【问题描述】:

我试图从我的 cvs 文件中删除空白行,但这不起作用,它只写出第一行

请看一下并告诉我如何获取所有带有文本的行并跳过空白行

代码如下: 我只是读出了csv文件的第一行

提前感谢您!

【问题讨论】:

  • 代码在哪里?
  • df.read_csv(...).dropna()
  • 嗯,空白行默认省略。

标签: python pandas csv


【解决方案1】:

首先用 pandas 读取你的 csv 文件

df=pd.read_csv('input.csv')

然后删除空白行,

df=df.dropna()

有关 dropna 的更多详细信息,请查看documentation

【讨论】:

  • 有没有办法优化行删除部分?我需要对非常大的 csv 文件进行这种处理(70Go..)
  • @SamadiSalahedine- dropna 是删除 nan 行的有效方法。如果您的文件很大,pandas 无法轻松处理,那么我建议您使用 dask。更多详情请关注dask.pydata.org/en/latest/…
【解决方案2】:

有问题:

for line in df:
    print (line)

返回列名。

【讨论】:

    【解决方案3】:

    如果我有一个如下所示的带有空白行的 csv 文件

    B;D;K;N;M;R 0;2017-04-27 01:35:30;C;3.5;A;01:15:00;23.0 1;2017-04-27 01:37:30;B;3.5;B;01:13:00;24.0 2;2017-04-27 01:39:00;K;3.5;C;00:02:00;99.0 4;2017-04-27 01:39:00;K;3.5;C;00:02:00;99.0

    df = pd.read_csv('input.csv',delimiter=';') 将给出忽略空行的数据框。

    B D K N M R 0 2017-04-27 01:35:30 C 3.5 A 01:15:00 23.0 1 2017-04-27 01:37:30 B 3.5 B 01:13:00 24.0 2 2017-04-27 01:39:00 K 3.5 C 00:02:00 99.0 4 2017-04-27 01:39:00 K 3.5 C 00:02:00 99.0

    您的代码在您使用open 时有效。 Pandas read_csv 会将 csv 文件转换为数据框。你们可能会互相混淆。

    df = open('input.csv')
    new_contents = []
    for line in df:
        if not line.strip():
            continue 
        else: 
            new_contents.append(line)
    

    【讨论】:

      【解决方案4】:

      对于最新的 pandas (v 1.3.0),有一个参数可以告诉它跳过空白行。默认情况下它是启用的,但如果你想让它为真(例如自我记录代码),只需将该标志设置为真。这是来自文档: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

      skip_blank_linesbool,默认为 True
            如果为 True,则跳过空行而不是解释为 NaN 值。

      所以,在你的代码中是:

      df = pd.read_csv(path, sep = ';', skip_blank_lines=True)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2014-07-27
        • 2018-03-24
        相关资源
        最近更新 更多