pandas 如何将一个表中的参数替换为另一个表中的值?

33qvvth1  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(169)

我目前正在通过SQL查询从处理后的CSV文件中的数据创建JSON文件,我正在Synapse的笔记本中执行此任务。目前,我的JSON结构正常运行,但我遇到了CSV中有两列包含参数的情况。我需要从另一个表中检索基于这些参数的值。
表1:
| ID| data1|参数1|参数2|
| --|--|--|--|
| 1 |外部数据|示例.ValidateData(input 1,{MinimumNumber}{Time},null)== true|“示例”:“(new int[] {Hours.First()/24})”|
| 2 |外部数据|示例.ValidateData(input 1,{MinimumNumber}{Time},null)== true|“示例”:“(new int[]{Hours})”|
参数表:
| ParameterName|值|
| --|--|
| 最小数量| 30 |
| 时间| 5 |
| 小时| 24 |
我想在创建最终JSON文件之前替换这些值,并根据指示的参数值获取一个包含输入值的数组
新表:
| ID| data1|参数1|参数2|
| --|--|--|--|
| 1 |外部数据|示例.ValidateData(input 1,{30}{5},null)== true|“示例”:“(new int[] {Hours.First()/24})”|
| 2 |外部数据|示例.ValidateData(input 1,{30}{5},null)== true|“示例”:“(new int[]{24})”|

zour9fqk

zour9fqk1#

你可以使用下面的替换函数,在使用Python的Synapse notebook中获取所需格式的新表:

def replace_parameters(row, parameter_df):
    for parameter_name, value in parameter_df.values:
        row = re.sub(rf'{{\s*{re.escape(parameter_name)}\s*}}', f'{{{value}}}', row)
    return row

字符串
将替换函数应用于参数1和参数2列,并使用以下代码打印它:

table1_df['Parameters1'] = table1_df['Parameters1'].apply(replace_parameters, parameter_df=parameters_df)
table1_df['Parameters2'] = table1_df['Parameters2'].apply(replace_parameters, parameter_df=parameters_df)
print(table1_df)


您将得到如下输出:

enter image description here

+---+----------+----------------------------------------------------+-----------------------------------------+
| Id | data     | parameters1                                       | parameters2                             |
+---+----------+----------------------------------------------------+-----------------------------------------+
| 1  | extradata| Example.ValidateData(input1, {30}, {5}, null) == true| “Example”:"(new int[] {Hours.First()/24})"|
+---+----------+----------------------------------------------------+-----------------------------------------+
| 2  | extradata| Example.ValidateData(input1, {30}, {5}, null) == true| “Example”:"(new int[] {24})"             |
+---+----------+----------------------------------------------------+-----------------------------------------+


下面是我的完整代码供参考:

import pandas as pd
import re
table1_data = {
    'Id': [1, 2],
    'data1': ['extradata', 'extradata'],
    'Parameters1': ['Example.ValidateData(input1, {MinimumNumber}, {Time}, null) == true', 'Example.ValidateData(input1, {MinimumNumber}, {Time}, null) == true'],
    'Parameters2': ['"Example":"(new int[] {Hours.First()/24})"', '"Example":"(new int[] {Hours})"']
}
parameters_data = {
    'ParameterName': ['MinimumNumber', 'Time', 'Hours'],
    'Value': [30, 5, 24]
}
table1_df = pd.DataFrame(table1_data)
parameters_df = pd.DataFrame(parameters_data)

def replace_parameters(row, parameter_df):
    for parameter_name, value in parameter_df.values:
        row = re.sub(rf'{{\s*{re.escape(parameter_name)}\s*}}', f'{{{value}}}', row)
    return row

table1_df['Parameters1'] = table1_df['Parameters1'].apply(replace_parameters, parameter_df=parameters_df)
table1_df['Parameters2'] = table1_df['Parameters2'].apply(replace_parameters, parameter_df=parameters_df)
print(table1_df)

相关问题