gpt4 book ai didi

python - 根据 pandas 数据帧中的数据将复合输出写入文本文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:37 24 4
gpt4 key购买 nike

这就是我的数据框的外观:

 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)

写入条件如下:

a{i} 应等于参数默认值,除非默认值为 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”被忽略。

如何使用 pandas 获得该输出?这可能吗?

编辑:

更简单地说,拥有这个数据框:

 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                                       function0      [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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com