如何将列表内列表的值分配给列表内另一个列表的值(python)?

Posted

技术标签:

【中文标题】如何将列表内列表的值分配给列表内另一个列表的值(python)?【英文标题】:How to assign values of list inside list to values of another list inside list (python)? 【发布时间】:2021-06-22 15:03:53 【问题描述】:

我有两个类似这样的列表:

lst1 =[['a','b'],['c']]
lst2 =[['dropnulls','regex']]

其中 lst1 具有数据框的列名,而 lst2 具有如果 dropnulls 那么它应该删除空值的过程,如果 regex 然后删除除数值之外的所有值。现在如果 lst1 =['a','b','c'] and if lst2 =['dropnulls','regex'] 那么我们可以这样做:

import numpy as np
import pandas as pd
from pandas import DataFrame
import re
data = [['abc123','abc23','123'],[np.nan,'123',np.nan],['bc123','qwe','abc'],['ABC@*&123',np.nan,'abc']]
df=pd.DataFrame(data, columns=['a','b','c'])
print(df)
 a      b    c
0     abc123  abc23  123
1        NaN    123  NaN
2      bc123    qwe  abc
3  ABC@*&123    NaN  abc

lst1 =['c','a','b'] 
lst2 =['regex']
for l in lst1:
    if 'dropnulls' in lst2:
        print(df[l].dropna())
    if 'regex' in lst2:
        print(df[df[l].str.contains(r'^\d+$', na=True)])

Then we get :
for regex:
 a      b    c
0  abc123  abc23  123
1     NaN    123  NaN
for dropnulls:
0    123
2    abc
3    abc
Name: c, dtype: object
0       abc123
2        bc123
3    ABC@*&123
Name: a, dtype: object
0    abc23
1      123
2      qwe
Name: b, dtype: object

但是当这样的列表给出lst1 =[['a','b'],['c']],lst2 =[['dropnulls','regex']]。它应该根据列表中值的位置来做:

lst1[0] is ['a','b'] 此列只能用于index[0] 的方法,用于列表内的列表,即这两列都应转到dropnulls['c'],其中index[1] 必须转到index[1]列表中的列表为regex

例如:

lstl[0] = lst2(list[0])
lst1[1]=lst2(list[1])

它必须像这样进入一个循环。我们可以对其进行硬编码,但如果方法是按其他顺序编写的怎么办? 有什么方法可以发送列名和适当的循环方法吗?

【问题讨论】:

【参考方案1】:

我不知道我是否正确理解了您,但您在调整两个列表中的项目以相互关联时遇到了问题。

你可以这样做:

import numpy as np
import pandas as pd
from pandas import DataFrame
import re
data = [['abc123','abc23','123'],[np.nan,'123',np.nan],['bc123','qwe','abc'],['ABC@*&123',np.nan,'abc']]
df=pd.DataFrame(data, columns=['a','b','c'])
print(df)
lst1 =[['a','b'],['c']]
lst2 =[['dropnulls','regex']]

functions = 
    'dropnulls': lambda x: df[x].dropna(),
    'regex': lambda x: df[df[x].str.contains(r'^\d+$', na=True)]


for index, internal_list in enumerate(lst1):
    for col in internal_list:
        operation = lst2[0][index]
        function = functions[operation]
        print(function(col))

顶部与您的程序相同。接下来,我定义了一个字典,以便使用 lambda 语法轻松访问特定函数。之后,您需要遍历第一个列表,保存列表索引,然后遍历里面的嵌套列表,对每一列执行您的操作。

这是你要求的吗?

【讨论】:

是的,几乎但不是在每一列上都这样做。我们可以将 a,b 之类的列传递给 dropnulls,将 c 列传递给正则表达式吗?

以上是关于如何将列表内列表的值分配给列表内另一个列表的值(python)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DataFrame 列的值插入列表

覆盖两个列表之间的单个对应元素

在 Kdb 中,如何将每个符号列表分配给值列表

如何将 SQL 查询中一个字段的值用于 Oracle Apex 上另一个字段的值列表?

在两个列表列表中查找匹配的字符串

如何将Django中列表的值传递给方法?