【问题标题】:Skipping certain lines of data - Python跳过某些数据行 - Python
【发布时间】:2017-01-28 21:25:49
【问题描述】:

我有一个 CSV 文件,其中包含大量需要绘制和排序的数据,等等。数据示例如下。

10, 50, 60, 74, 19
10, 55, 68, 93, 10
10, 84, 92, 75, 32
10, 58, 39, 82, 12
20, 15, 12, 84, 35
20, 53, 13, 96, 57
20, 53, 32, 64, 67
20, 56, 31, 29, 18
30, 85, 92, 18, 95
30, 75, 12, 92, 12
...
90, 35, 21, 95, 47
100, 67, 96, 73, 47
100, 86, 32, 62, 32
100, 32, 53, 69, 57
100, 34, 64, 72, 34

我正在寻找的是将第一行、第 4 行、第 8 行等放入列表中。所以它看起来像这样:

column1 = ['10', '20', '30', ..., '100']
column3 = ['60', '12', '92', ..., '73']
column5 = ['19', '35', '95', ..., '47']

注意:数据集的第一行应该在输出的第一列,数据的第二行是输出的第二列,以此类推。 此外,我希望能够控制我选择将哪些列放入列表(以及哪些行)。

我也在寻找一种方法来调整我想从第 n 行开始。例如,如果我们从第 2 行开始,输出将是这样的:

column1 = ['10', '20', '30', ..., '100']
column3 = ['68', '13', '12', ..., '32']
column5 = ['10', '35', '12', ..., '32']

这是我目前的代码:

import numpy as np
import matplotlib.pyplot as plt
import csv

column1 = []
column2 = []
column4 = []

with open('csvFile.csv', 'rb') as f:
    w = csv.reader(f, delimiter = ',')
    for i, line in enumerate(w):
        if i == 0 or i == 1:
            pass # Skip first row
        else:
            column1.append(line[1])
            column2.append(line[2])
            column4.append(line[4])

这给了我列中的所有值,这是我不想要的。也许我想太多了,因为我之后想做的是索引列表并删除我不想要的值(我的数据集比这里显示的要大得多 - 我总共有 26 行第一个数字(即 26 行数字 10 后面有数据,26 行 20 有数据,26 行 30 等)

【问题讨论】:

  • 我对第一行,第四行,第八行的事情感到很困惑。好像是第 1 列、第 3 列和第 5 列?
  • 我每 4 行查找一次数据。因此,例如,如果我们从第 2 行 (10, 55, 68, 93, 10) 开始,我们将进入第 6 行 (20, 53, 13, 96, 57),第 10 行(示例中未显示) .我还需要控制要从哪一行开始。

标签: python list csv indexing


【解决方案1】:

您可以检查i 是否是四的倍数。如果不是四的倍数则跳过

with open("data", 'rb') as f:
    w = csv.reader(f,delimiter = ",")
    for i, line in enumerate(w):
        if (i % 4 == 0): 
            column1.append(line[0])
            column2.append(line[1])
            column3.append(line[2])

【讨论】:

  • 为什么不if (i % 4 == 0): #append lines 而不是测试if (i % 4 != 0): 然后通过并使用else 分支?
  • 因为我昏昏沉沉,没想到 :)
  • 好的,现在我看到它是有道理的。为什么在我不知道之前我没有想到这一点。但是现在我将如何实际控制我从哪一行开始呢?
  • @BrandonMolyneaux 这取决于你开始的意思。如果你的意思是你想从第二行开始,然后每四行你可以将测试更改为i % 4 == 1
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2017-07-20
  • 1970-01-01
相关资源
最近更新 更多