代码之家  ›  专栏  ›  技术社区  ›  Na_Na_Na

在数据帧中迭代,每个条目有多个元素,以获得列表

  •  0
  • Na_Na_Na  · 技术社区  · 11 月前

    我有一个数据帧,看起来有点像这样。它有两列,有些列有多个数据。例如,第一列中的第一行有“tom-15”,“-13”,第二列有10,3.3。 NA值为空

    data = [['"tom-15", "to-13"', '10, 3.3'], ['"nick-12"', '15.5'], ['NA', '14']]
    df = pd.DataFrame(data, columns=['Att1', 'Att2'])
    

    我需要将这些列用作代码其他部分的参数,但由于某些列有两个或多个条目,我想为每种情况创建一个列表。我试过这个:

    for index, row in df.iterrows():
        l1 = row["Att1"].tolist()
        l2 = row["Att2"].tolist()
    

    这给了我一个错误 'str' object has no attribute 'tolist' 。如何在每种情况下创建列表?基本上,我希望每次迭代后都有两个列表 l1 包含以下内容的列表 Att1 l2 内容如下 Att2 。每次迭代时,内容都应该发生变化。

    我希望第一组列表看起来像这样 l1=["tom-15", "to-13"] l2是这样的 l2=[10, 3.3] 因此,最后一组应该是 l1=[] l2=[14]

    1 回复  |  直到 11 月前
        1
  •  0
  •   BeRT2me    11 月前
    df = pd.DataFrame(data, columns=['Att1', 'Att2'])
    df = df.replace("NA", None)
    df = df.applymap(lambda x: [i.strip('"') for i in x.split(", ")], na_action="ignore")
    
    for index, row in df2.iterrows():
        l1 = row["Att1"] if row["Att1"] else []
        l2 = row["Att2"] if row["Att2"] else []
        print("index =", index)
        print("l1 =", l1)
        print("l2 =", l2)
        print()
    

    输出:

    index = 0
    l1 = ['tom-15', 'to-13']
    l2 = ['10', '3.3']
    
    index = 1
    l1 = ['nick-12']
    l2 = ['15.5']
    
    index = 2
    l1 = []
    l2 = ['14']
    
    推荐文章