【问题标题】:How to iterate code over each string in a list of strings in pandas如何在熊猫字符串列表中的每个字符串上迭代代码
【发布时间】:2021-01-23 10:01:07
【问题描述】:

我有一个我想检查和扩展的对象列表。 具体来说,我的初始数据框是

Name        
1   object1 
7   object2 
6   object3 
4   object4 
0   object5 
8   object6 

我将以下函数应用于我的数据框:

def example(file):
    
...
    my_list2 = []
    for u in file['Name']:

        try:
            minim = ...
        except:
            minim = 'NA'
        my_list2.append(minim)

    file['Others'] = my_list2
    return file

创建一个新列Others,如下所示:

    Name         Others
    1   object1 [object4, object3, object22]
    7   object2 [object1]
    6   object3 [object1]
...

我想做的是将函数也应用于Others 列中列表中的每个元素。这意味着我应该为第一个列表中的每个变量运行它,即,

[object4, object3, object22]

为了在我的初始数据框中添加一行(object22,因为它不包含在Name 列中)并具有类似的内容

    Name         Others
    1   object1 [object4, object3, object22]
    7   object2 [object1]
    6   object3 [object1]
...
   10   object22 [object23, object40, object1]

当然,当Others 中的所有元素都在Name 列中时,循环停止运行。 objectX 只是此示例的虚拟名称:Name 中的变量名称可以是 dog,或 mom,或其他任何名称。

我不知道如何运行该函数以将其应用于Others 列下列表中的元素,以将结果附加到原始数据集中。

如果您需要更多信息,请告诉我。

总结:

我需要运行函数

  • 用于列名称中的对象。这会为每个对象生成一个字符串列表(最终也是空列表);
  • 对于字符串列表中的每个对象:这会在名称列中创建新行
  • Name 列中添加的新对象

【问题讨论】:

  • 也许您可以向minimal-reproducible-example 提供您的问题。事实上,我无法在问题中清楚地了解您真正想要的内容。
  • @Ferris 我更新了问题。我不知道如何减少函数中的代码以使示例可重现。您可以将该函数视为随机生成后缀为 1 到 100 的“对象”变量列表的函数(只是为了使其更简单;但名称中的变量可以是“妈妈”、“狗”、“房子”、 ...)。如果您需要更多信息,请告诉我。非常感谢
  • 我发布了一个答案,希望它会有所帮助。

标签: python pandas for-loop


【解决方案1】:

这个答案只是为了解决如何提取新的Name来处理。

您可以使用 'explode' 将列表的元素转换为行:

data = [{'Name': 'object1', 'Others': ['object4', 'object3', 'object22']},
 {'Name': 'object2', 'Others': ['object1']},
 {'Name': 'object3', 'Others': ['object1']}]
df = pd.DataFrame(data)
print(df)

          Name                        Others
    0  object1  [object4, object3, object22]
    1  object2                     [object1]
    2  object3                     [object1]

df_exp = df.explode('Others')
print(df_exp)

          Name    Others
    0  object1   object4
    0  object1   object3
    0  object1  object22
    1  object2   object1
    2  object3   object1

objn = pd.Series(list(set(df_exp['Others']) - set(df['Name'])), name='Name')
print(objn)

    0     object4
    1    object22
    Name: Name, dtype: object

然后将 func 应用于objn 创建Others 内容。将新数据框表示为dfn

df = df.append(dfn)

重复explode并应用func直到len(objn) == 0

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2019-07-15
    • 2010-12-01
    • 2010-10-07
    相关资源
    最近更新 更多