【问题标题】:skip specific line that contains certain value when you read pandas data frame读取熊猫数据框时跳过包含特定值的特定行
【发布时间】:2016-11-17 05:41:10
【问题描述】:

当您使用命令 pd.read_csv 读取 csv 时, 如何跳过连续包含特定值的行? 如果在第 50、55 行中,第一列的值为 100,所以我想在读取 csv 文件时跳过这些行。 我如何将这些命令放入像 pd.read_csv('read.csv') 这样的读入命令中? 该值的总长度为 300。

【问题讨论】:

  • 值的长度是多少?
  • 稍后删除它们和根本不阅读它们有什么区别?你可以简单地做:pd.read_csv('file.csv').query('col1 != 100')...
  • ^^^^^^^^^^那个! @Kartik,为什么不是答案?
  • 因为,@piRSquared,我不确定 OP 真正想要什么。另外,我不知道该列的名称是什么。但是,您是对的,我应该将其发布为答案,并让 OP 对此发表评论。

标签: python csv pandas dataframe


【解决方案1】:

稍后删除它们和根本不阅读它们有什么区别?你可以简单地这样做:

pd.read_csv('file.csv').query('col1 != 100')

【讨论】:

【解决方案2】:

唯一的方法是预先解析文件。使用生成器读取文件,然后只使用yield 您想要的行。然后,您可以使用它将您想要的行读入StringIO 对象,并将该对象代替文件路径传递给read_csv

import StringIO
import pandas as pd

def read_file(file_name):
    with open(file_name, 'r') as fh:
        for line in fh.readlines():
            parts = line.split(',')
            if parts[0] != '100':
                yield line

stream = StringIO.StringIO()
stream.writelines(read_file('foo.txt'))
stream.seek(0)

df = pd.read_csv(stream)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 2017-09-27
    • 2018-12-25
    • 2018-05-20
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多