这是我的数据框的外观:
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/