Python 删除CSV文件中不需要的行

Python 删除CSV文件中不需要的行,python,Python,我是Python新手,在删除csv文件中不需要的行时遇到问题。例如,我有3列和很多行: A B C hi 1.0 5 hello 2.0 6 ok 3.0 7 我使用numpy(而不是csv)加载数据 我想为第二列介绍一个范围 b=np.arange(0, 2.1,0.1) 我不知道该如何使用那段代码 我想要的最终输出如下: A B C hi 1.0 5 hello 2.0 6 最后一行将被删除,因为我为

我是Python新手,在删除csv文件中不需要的行时遇到问题。例如,我有3列和很多行:

A      B     C
hi     1.0   5
hello  2.0   6
ok     3.0   7
我使用numpy(而不是csv)加载数据

我想为第二列介绍一个范围

b=np.arange(0, 2.1,0.1) 
我不知道该如何使用那段代码

我想要的最终输出如下:

A      B     C
hi     1.0   5
hello  2.0   6

最后一行将被删除,因为我为第二列选择的范围仅为2.0。我不知道如何才能做到这一点。

您可以使用逻辑索引来完成

 index = (x[:, 1] <= 2.0)

仅选择满足此条件的行可以使用逻辑索引

 index = (x[:, 1] <= 2.0)
仅选择满足此条件的行

尝试使用熊猫:

import pandas as pd

a = pd.read_csv('data.csv', index_col=0) # column A will be the index.
a

       B  C
A          
hi     1  5
hello  2  6
ok     3  7
对于B的每一个值,最大为2:

a[a.B <= 2]

       B  C
A          
hi     1  5
hello  2  6
a[a.B尝试熊猫:

import pandas as pd

a = pd.read_csv('data.csv', index_col=0) # column A will be the index.
a

       B  C
A          
hi     1  5
hello  2  6
ok     3  7
对于B的每一个值,最大为2:

a[a.B <= 2]

       B  C
A          
hi     1  5
hello  2  6

a[a.B您可以只使用csv模块。N.B以下要求csv字段是逗号分隔的,而不是制表符分隔的(如您的示例所示)

更新要求后编辑

在列“C”上有额外限制,例如值必须大于等于6

import csv
import numpy as np

allowed_values_B = np.arange(0, 2.1, 0.1)
def accept_row(row):
    return (float(row[1]) in allowed_values_B) and (int(row[2]) >= 6)

with open('data.csv') as data:
    reader = csv.reader(data)
    field_names = next(reader)
    filtered_rows = [row for row in reader if accept_row(row)]

>>> filtered_rows
[['hello', '2.0', '6']]

您可以只使用csv模块。N.B以下要求csv字段是逗号分隔的,而不是制表符分隔的(如您的示例所示)

更新要求后编辑

在列“C”上有额外限制,例如值必须大于等于6

import csv
import numpy as np

allowed_values_B = np.arange(0, 2.1, 0.1)
def accept_row(row):
    return (float(row[1]) in allowed_values_B) and (int(row[2]) >= 6)

with open('data.csv') as data:
    reader = csv.reader(data)
    field_names = next(reader)
    filtered_rows = [row for row in reader if accept_row(row)]

>>> filtered_rows
[['hello', '2.0', '6']]

我只需要输入a[a.B是的,使用Pandas,您可以使用其名称访问列。因此
a.B我只需要输入a[a.B是的,使用Pandas,您可以使用其名称访问列。因此
a.B我得到以下错误:“ValueError:无法将输入数组从形状(997)广播到形状(1000)”我得到以下错误:“ValueError:无法将输入数组从形状(997)广播到形状(1000)”谢谢!这一个可以工作,但我也将为第三列提供一个不同的截止值。这可以工作吗?过滤的_行2=[如果允许的_值中浮动(行[2]),则读卡器中的行对应于行]@justin您的意思是完全独立的行视图,以便为列B筛选行B(满足一个条件)和单独筛选行C(满足第二个条件)?…或者你是说只有一行过滤的_行同时满足这两个条件?@mhwake:我想要一行过滤的_行同时满足这两个条件。:)谢谢!这一行可以工作,但我也会为第三列提供一个不同的截止值。这行可以工作吗?过滤的_行2=[读卡器中的行如果在允许的_值中浮动(行[2])@justin您是指完全独立的行视图,以便为列B筛选行B(满足一个条件)和为列C筛选行C(满足第二个条件)?…还是指仅一个同时满足两个条件的筛选行?@mhwake:我想要1个同时满足两个条件的筛选行。:)
import csv
import numpy as np

allowed_values_B = np.arange(0, 2.1, 0.1)
def accept_row(row):
    return (float(row[1]) in allowed_values_B) and (int(row[2]) >= 6)

with open('data.csv') as data:
    reader = csv.reader(data)
    field_names = next(reader)
    filtered_rows = [row for row in reader if accept_row(row)]

>>> filtered_rows
[['hello', '2.0', '6']]