循环上的Python、if语句

循环上的Python、if语句,python,if-statement,Python,If Statement,我有一个问题,从我的python脚本中排除了一些数据,初学者在这里学习 目前我有一个带有c的csv文件。19列,我需要打印第0列、第1列、第8列和第18列-我已经成功地打印了这些列 第8列的值为0.00或更高。我希望脚本排除这些行,而不是打印它们。我尝试了if语句,但下面的代码只是执行并打印所有行,而不是只打印那些0.01或以上的行 当前代码: import csv m = open('data.csv') csv_m = csv.reader(m) for row in csv_m:

我有一个问题,从我的python脚本中排除了一些数据,初学者在这里学习

目前我有一个带有c的csv文件。19列,我需要打印第0列、第1列、第8列和第18列-我已经成功地打印了这些列

第8列的值为0.00或更高。我希望脚本排除这些行,而不是打印它们。我尝试了if语句,但下面的代码只是执行并打印所有行,而不是只打印那些0.01或以上的行

当前代码:

import csv

m = open('data.csv')
csv_m = csv.reader(m)

for row in csv_m:
        if row[8] >= 1:
                print(row[0],row[1],row[8],row[18],)

如果您愿意使用Pandas库,这可以很容易地完成

您可以尝试以下方法:

import pandas as pd

data = pd.read_csv('data.csv')

good_data = data[data[data.columns[8]] >= 0.01]

print(good_data.iloc[:, [0, 1, 8, 18]])

你应该使用

以打开(“文件”、“模式”)作为文件:

这将确保文件在操作结束时关闭。这是一个很好的练习

with open('data.csv', 'r') as file:  
  for row in file: 
    if row[8] >= 1.0 :
      print(row)
您应该发布一个csv文件的示例,以清楚地说明这一点检查行的格式,可能在比较之前必须将其转换为float

您可以选择使用熊猫,因为这是一个csv

import pandas as pd

data = pd.read_csv('data.csv')

filter = data[8] >= 1
filtered_data = data[filter]

for index, row in filtered_data.iterrows():
  print (row[0],row[1],row[8],row[18])

csv数据始终是字符串,
“1”
(字符串)永远不会与
1
(int)或
0.01
(float)进行比较。您需要明确地将csv数据转换为适当的类型(使用
int(第[8]行])
float(第[8]行])
,或者,更简单地说,如果:

if row[8] == "1": # or "0.01"
   # etc
另外,您希望1/以二进制模式(python2)或使用
newline='
参数(python3)打开文件,2/使用
with
语句确保无论发生什么情况,文件都将关闭:

# py3 version
with open("yourfile.csv", newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        if row[8] > "0.01":
            print(row[0],row[1],row[8],row[18])

列表的第一个索引是第[0]行(索引为0)。请尝试第[7]行。是否出现任何错误?从csv读取的数据是
str
类型。因此您无法直接与
int
进行比较。请尝试
float(第[8]行])>=1
您说的是“0.01或更高”在描述中,但是你的代码说。
=1
代码天数>=1,因为我只是想让它工作。打印出来时,没有定义错误,但所有行都打印出来。这里不需要panda。为什么每个人都坚持使用panda而不需要它?因为它对初学者来说很简单。我不认为800磅的lib比简单的csv mod简单对于初学者来说,理解基本知识(在这种情况下,不是因为字符串是由数字字符组成的,它才是数字)比使用卷积解更好。