【发布时间】: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])
它必须像这样进入一个循环。我们可以对其进行硬编码,但如果方法是按其他顺序编写的怎么办? 有什么方法可以发送列名和适当的循环方法吗?
【问题讨论】:
标签: python pandas list dataframe for-loop