【问题标题】:filtering and make a list of lists from a csv file in python过滤并从python中的csv文件制作列表列表
【发布时间】:2019-12-10 01:35:36
【问题描述】:

我有一个类似于小例子的 csv 文件:

小例子:

Id  sv  item1   item2   item3
pos ab  4   5   8
reg ad  7   85  96
neg af  14  78  32
neg ab  47  5   6

我想从这个 csv 文件中创建一个 python 列表列表。我想跳过前 2 列,然后在“Id”列中查找“neg”。如果“Id”中的值为“neg”,我想将non-skipped 列的每一行的值放在一个内部列表中,并使用所有inner lists 制作一个列表列表。 对于这个小例子,“Id”列的最后两行是“neg”,所以我只取这些行。然后我将跳过第一 2 列,因此我们将剩下 3 列。这就是为什么结果将是具有 3 个内部列表的列表的原因。 这是预期的输出:

预期输出:

results = [[14, 47], [78, 5], [32, 6]]

为了得到这个结果,我在 python 中编写了以下代码,但它没有返回我想要的。你知道怎么解决吗?

with open("infile.txt") as f:
    df = f.loc[f["Id"] == "neg"]
    results = []
    for line in df:
        results.append(line)

【问题讨论】:

    标签: python-3.x pandas csv


    【解决方案1】:

    使用csv 模块

    例如:

    import csv
    
    results = []
    with open(filename, "rU") as infile:
        reader = csv.reader(infile, delimiter=" ")
        for row in reader:
            if row[0] == 'neg':
                results.append(list(filter(None, row[2:])))
    
    print([i for i in zip(*results)])
    

    输出:

    [('14', '47'), ('78', '5'), ('32', '6')]
    

    【讨论】:

      【解决方案2】:

      您可以为此使用熊猫

      df = pd.read_csv('yourfile.csv')
      
      results = df[df.Id.eq('neg')].iloc[:,2:].values.T.tolist()
      
      print(results)
      [[14, 47], [78, 5], [32, 6]]
      

      【讨论】:

        【解决方案3】:

        您可以同时使用 pandas 和 numpy!

        一条线解决方案

        df=df.read_csv("infile.csv")
        results=np.transpose(df[df['Id']=='neg'][['item1','item2','item3']].values).tolist()
        

        结果是

        [[14, 47], [78, 5], [32, 6]]
        

        详细解释:

        import pandas as pd
        import numpy as np
        
        df=pd.read_csv("infile.csv")
        df=df[df['Id']=='neg'] #filter dataframe where Id is equal to 'neg'
        df=df[['item1','item2','item3']] #select only item1,item2,item3 columns
        df=df.values #Return a Numpy representation of the DataFrame.
        transposed=np.transpose(df) #Permute the dimensions of an array.
        results=transposed.tolist() #returns a python list datastructure
        print(results)
        

        您可以在此处阅读有关使用的所有方法的更多信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-15
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多