使用带有Pandas Mask的configparser作为ETL过程的一部分

时间:2018-06-06 15:53:06

标签: pandas etl configparser

我们正在使用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

但是掩码查询非常有限。

有什么建议吗?

0 个答案:

没有答案