python - 循环多个数据帧并保存多个列表
问题描述
我有一堆数据框,如下所示:
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)
我知道这可能与没有在本地保存行值有关。我在这里阅读了很多与我的问题类似的帖子,但当时我无法完全使用......任何帮助将不胜感激,我真的被困在这里..
解决方案
你是这个意思吗?
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]]
推荐阅读
- javascript - JS中super在OOP中的作用
- javascript - 如何在 React.JS 中更改登录/注销时的导航栏文本?
- c++ - 使用 Node.js 和 Node Addons 的任务栏中的 Flash 终端
- windows - 在 Windows 上提取 .tar.gz 文件
- python-3.x - 使用类的 Tkinter 嵌套框架
- python - python中的路径优化(tsp)
- c# - Xamarin Forms NavigationBar 有左边距
- c++ - 除了 std::vector 之外,是否有一个 std 容器不复制和销毁属于类的元素?
- node.js - Angular Universal 页面加载/刷新问题
- c# - Ajax 请求未在控制器类中命中正确的 Post 方法