如何将列表内列表的值分配给列表内另一个列表的值(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)?的主要内容,如果未能解决你的问题,请参考以下文章