我们正在使用Pandas
来清理各种数据集
由于我们有各种来源,因此每个数据源使用config
个文件
有没有办法使用mask
动态调用configparser
?
假设config_mask.ini
文件如下:
(为简单起见,我将不同数据集的2种配置合并为1个文件)
[section_df1]
mask=df.a>2
[section_df2]
mask = (df.c>3) & (~df.d.isnull())
我们如何在下面的datafarmes上运行配置?
from configparser import ConfigParser
conf_parser = ConfigParser()
conf_parser.read('config_mask.ini')
for _ in range(2):
# This simulates reading a file from csv to create a dataframe
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)), columns=['a', 'b', 'c', 'd', 'e'])
print(df)
a b c d e 0 2 0 4 4 5 1 4 1 4 9 3 2 7 7 1 6 7 3 8 6 2 7 6 4 7 3 1 7 9
我们想的是:
for sec in conf_parser.sections():
for k,v in conf_parser[sec].items():
mask = v
df = df[mask]
... continue processing df
问题是配置解析器返回的字符串不能是condition
中的mask
对象。
如果我们将配置文件设置为加载为字典 - 我们可以按如下方式运行:
[section_df3]
#col_filter=column:value
col_filter=a:3
for _,(v) in conf_parse['section3'].items():
print((v.split(':')[0],v.split(':')[1]) )
mask = df[v.split(':')[0]]>int(v.split(':')[1])
df = df[mask]
... continue process df
但是掩码查询非常有限。
有什么建议吗?