这是我的数据框的外观:

 FULL_NAME    ARGUMENT    DEF_VALS         TYPE
 function1    f1_arg1     NAN              NoneType
 function1    f1_arg2     NAN              NAN
 function1    f1_arg3     NAN              NAN
 function2    f2_arg1     0                int
 function3    f3_arg1     True             bool
 function3    f3_arg2     'something'      str


复制数据的方式如下:

import pandas


D = {'FULL_NAME': ['function1', 'function1', 'function1', 'function2', 'function3', 'function3'], 'ARGUMENT': ['f1_arg1', 'f1_arg2', 'f1_arg3', 'f2_arg1', 'f3_arg1', 'f3_arg2'], 'DEF_VAL': [float('nan'), float('nan'), float('nan'), 0, True, 'something'], 'TYPE': ['NoneType', float('nan'), float('nan'), 'int', 'bool', 'str']}
dataframe = pandas.DataFrame(D)


使用此数据框,我需要以某种方式将以下信息写入文本文件:

a1=None
a2=
a3=
function1(f1_arg1=a1, f1_arg2=a2, f1_arg3=a3)

a1=0
function2(f2_arg1=a1)

a1=True
a2='something'
function3(f3_arg1=a1, f3_arg2=a2)


编写条件如下:

除非默认值为NAN并且类型为NAN,否则{{}}应该等于参数默认值(在这种情况下,其后应带有'='符号)。如果参数的默认值为NAN但类型为NoneType,则a {i}必须为None

“ FULL_NAME”和“ ARGUMENT”列中的所有值都是字符串。

还有另一个条件使所有事情变得极为复杂:如果参数之一的值等于某个特殊值(special_value),则不应将其包含在函数签名中。
例如,如果我们有函数g(W,r,dim,fix = False,r = 0),其中“ W”是特殊参数,那么对于该函数应写入文本文件的内容是:

a1=
a2=
a3=False
a4=0
g(r=a1, dim=a2, fix=a3, r=a4)


其中“ a1”对应于“ r”,“ a2”对应于“ dim”等,而“ W”被忽略。

我如何通过使用熊猫来获得输出?有可能吗?

编辑:

简单来说,具有以下数据框:

 FULL_NAME    ARGUMENT    DEF_VALS         TYPE
 function1    f1_arg1     NAN              NoneType
 function1    f1_arg2     NAN              NAN
 function1    f1_arg3     NAN              NAN
 function2    f2_arg1     0                int
 function3    f3_arg1     True             bool
 function3    f3_arg2     'something'      str


考虑到上述条件,我希望使其看起来像这样:

function                                       args
function1(f1_arg1=a1, f1_arg2=a2, f1_arg3=a3)  ['a1=None', 'a2=', 'a3=']
function2(f2_arg1=a1)                          ['a1=0']
function3(f3_arg1=a1, f3_arg2=a2)              ['a1=True', 'a2=something']

最佳答案

这可以通过一些字符串操作,groupby cumcount和应用位来实现,即

df['args']='a'+(df.groupby('FULL_NAME').cumcount()+1).astype(str)

df['ARGUMENT'] =   df['ARGUMENT']+ '=' + df['args']

df['args'] += '='

df['args'] = df.apply(lambda x: x['args']+'NONE' if x['TYPE'] == 'NoneType' else x['args']
                        if pd.isnull(x['TYPE']) else x['args']+str(x['DEF_VAL']),1   )

ndf = pd.concat([pd.DataFrame(df.groupby('FULL_NAME')['ARGUMENT'].apply(tuple)),
       pd.DataFrame(df.groupby('FULL_NAME')['args'].apply(list))],1)

ndf['function'] = (ndf.reset_index()['FULL_NAME'] + ndf.reset_index()['ARGUMENT'].apply(str)).tolist()

ndf = ndf.reset_index(drop=True).drop('ARGUMENT',1)

ndf['function'].replace(["'",",\)"],["",")"],regex=True,inplace=True)


输出:

                       args函数
0 [a1 = NONE,a2 =,a3 =] function1(f1_arg1 = a1,f1_arg2 = a2,f1_arg3 = a3)
1 [a1 = 0] function2(f2_arg1 = a1)
2 [a1 = True,a2 = something] function3(f3_arg1 = a1,f3_arg2 = a2)


希望能帮助到你。

关于python - 根据来自pandas数据框的数据将复合输出写入文本文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46129191/

10-13 06:19
查看更多