首页 > 解决方案 > 循环多个数据帧并保存多个列表

问题描述

我有一堆数据框,如下所示:

import pandas as pd

data1 = [['1', '2', 'mary', 123], ['1', '3', 'john', 234 ], ['2', '4', 'layla', 345 ]]
data2 = [['2', '6', 'josh', 345], ['1', '2', 'dolores', 987], ['1', '4', 'kate', 843]]

df1 = pd.DataFrame(data1, columns = ['state', 'city', 'name', 'number1'])
df2 = pd.DataFrame(data2, columns = ['state', 'city', 'name', 'number1'])

出于某种愚蠢的原因,我需要以这种方式将其转换为列表(对于每一行):

list(
    df1.apply(
        lambda x: {
            "profile": {"state": x["state"], "city": x["city"], "name": x["name"]},
            "number1": x["number1"],
        },
        axis=1,
    )
)

什么返回我正是我需要的:

[{'profile': {'state': '1', 'city': '2', 'name': 'mary'}, 'number1': 123},
 {'profile': {'state': '1', 'city': '3', 'name': 'john'}, 'number1': 234},
 {'profile': {'state': '2', 'city': '4', 'name': 'layla'}, 'number1': 345}]

如果我对每个数据帧都这样做,它会起作用,但我需要编写一个函数,以便以后可以使用它。另外,我需要能够在操作后分别存储 df1 和 df2 。

我试过这样的事情:

df_list = [df1, df2]
for row in df_list:
    row = list(row.apply(lambda x: {'send': {'state':x['state'], 'city':x['city'], 'name':x['name']}, 'number1':x['number1']}, axis=1))

但它只保存列表 (df2) 行中最后一个 df 的值。

另外,我尝试了这样的事情(还有很多其他的东西):

new_values = []
for row in df_list:
    row = list(row.apply(lambda x: {'send'{'state':x['state'],'city':x['city'],'name':x['name']},'number1':x['number1']}, axis=1))
    new_values.append(df_list)

我知道这可能与没有在本地保存行值有关。我在这里阅读了很多与我的问题类似的帖子,但当时我无法完全使用......任何帮助将不胜感激,我真的被困在这里..

标签: pythonpandasdataframeseries

解决方案


你是这个意思吗?

def func(df):
    return list(df.apply(lambda x:{'profile' : {'state': x['state'],'city': x['city'],'name':x['name']},'number1': x['number1']}, axis=1))

你可以像这样使用它:

df1 = func(df1)

如果你想映射所有的数据框:

df1, df2 = [func(df) for df in [df1, df2]]

推荐阅读