【问题标题】:Looping values of a column in dataframe to a function in Python将数据框中列的值循环到 Python 中的函数
【发布时间】:2020-09-11 16:50:49
【问题描述】:

我试图在一个函数上运行一个循环(数据框中的列),该函数返回一个字典列表,并且应该将每个迭代的结果存储在一个单独的列表中,用于列中的每个值。

Example:

name id type
a     1 sol
b     2 sol
c     3 sol

我尝试了以下代码,但没有得到任何结果

for id in df:
    name_id = []
    name_id.append(getAct(67,id,'pow','gen'))


Output
    [{'status': 'success', 'message': 'success', 'data': []}]


def getAct(client_id, plant_id, tag_name, type_name):
    api_endpoint = ''

    today = datetime.date.today()

    headers = {'token': get_token()['access_token'],
               'Content-Type': 'application/json'}

    params = {'client_id': str(client_id),
              'from-date': str(today),
              'to-date': str(today),
              'tag': str(tag_name),
              'type': str(type_name),
              'plant-id': str(plant_id)
              }

    r = requests.post(url=api_endpoint, headers=headers, params=params)

    return r.json()

getAct 函数示例:

getAct(67,1,'pow','gen')

    [{'utc_time': '2020-05-01 14:51:54',
    'value': -0.02,
    'insert': '2020-05-01 20:31:16'},
   {'utc_time': '2020-05-01 14:52:51',
    'value': -0.02,
    'insert': '2020-05-01 20:31:21'}]

预期输出

a_1 = [{'utc_time': '2020-05-01 14:51:54',
        'value': -0.02,
        'insert': '2020-05-01 20:31:16'},
       {'utc_time': '2020-05-01 14:52:51',
        'value': -0.02,
        'insert': '2020-05-01 20:31:21'}]
b_2 = [{'utc_time': '2020-05-01 14:51:54',
        'value': 4.02,
        'insert': '2020-05-01 20:31:16'},
       {'utc_time': '2020-05-01 14:52:51',
        'value': 4.02,
        'insert': '2020-05-01 20:31:21'}]
c_3 = [{'utc_time': '2020-05-01 14:51:54',
        'value': 6.9,
        'insert': '2020-05-01 20:31:16'},
       {'utc_time': '2020-05-01 14:52:51',
        'value': 7.3,
        'insert': '2020-05-01 20:31:21'}]

我是 Python 新手。请帮忙!

【问题讨论】:

  • 目前尚不清楚预期数据与 DataFrame 中的输入数据有何关系,除了输入和输出都具有三个元素。您不能(或不应该)在脚本中获取以数据命名的变量,这也不是很有用。 getAct 来自哪里?
  • 它们通过id 关联。预期输出中的每个字典列表都对应于在函数中作为参数传递的 id 号。 getAct 来自 API。我正在为您的细读和需要添加该功能。

标签: python function loops dataframe dictionary


【解决方案1】:

看来这可以满足您的要求:

import pandas as pd

df = pd.DataFrame([
    {'name': 'a', 'id': 1, 'type': 'sol'},
    {'name': 'b', 'id': 2, 'type': 'sol'},
    {'name': 'c', 'id': 3, 'type': 'sol'}
])
# showing this is the same as the data you shared in the example
print(df.to_string(index=False))


def dummy_getAct(client_id, plant_id, tag_name, type_name):
    return [
        {'utc_time': 'some date', 'value': 1, 'insert': 'some date'},
        {'utc_time': 'some date', 'value': 2, 'insert': 'some date'}
    ]


result = {i: dummy_getAct(67, i, 'pow', 'gen') for i in df['id']}
print(result)

结果:

name  id type
   a   1  sol
   b   2  sol
   c   3  sol
{1: [
    {'utc_time': 'some date', 'value': 1, 'insert': 'some date'}, 
    {'utc_time': 'some date', 'value': 2, 'insert': 'some date'}], 
 2: [{'utc_time': 'some date', 'value': 1, 'insert': 'some date'}, 
     {'utc_time': 'some date', 'value': 2, 'insert': 'some date'}], 
 3: [{'utc_time': 'some date', 'value': 1, 'insert': 'some date'}, 
     {'utc_time': 'some date', 'value': 2, 'insert': 'some date'}]}

所以,关键是:

result = {i: dummy_getAct(67, i, 'pow', 'gen') for i in df['id']}

您可以使用result[1] 访问特定结果;它只是一个以id 为键的字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2019-04-08
    相关资源
    最近更新 更多