如何将嵌套循环输出结果保存至DataFrame的不同列?
问题
我正在运行一个嵌套循环,希望将输出结果保存到四个不同列中,例如C1R1对应第一列第一行的值、C2R2对应第二列第二行的值等。目前编写的代码得到的是一维列表,格式如下:
['C1R1', 'C2R1', 'C3R1', 'C4R1']
我的代码如下:
dfs1 = [] for i in range(24): pd = (data_json2['data']['Rows'][i]) for j in range(4): pd1 = pd['Columns'][j]['Value'] dfs1.append(pd1)
我期望得到的结果格式如下(类似DataFrame结构):
Column 1 Column 2 Column 3 Column 4 0 0 24 48 72 1 1 25 49 73 ... 23 23 47 71 95
但当前得到的是一维列表:
[0, 1, 2, 3, ..., 39]
请问有什么合适的方法可以实现需求?
解决方案
方法1:修改循环生成二维列表
把每一行的4列数据先整理成子列表,再添加到主列表中,得到二维结构后可直接转为DataFrame:
dfs1 = [] for i in range(24): row_data = [] # 存储当前行的所有列数据 pd_row = data_json2['data']['Rows'][i] for j in range(4): row_data.append(pd_row['Columns'][j]['Value']) dfs1.append(row_data) # 将整行数据加入主列表 # 转换为DataFrame(按需使用) import pandas as pd df = pd.DataFrame(dfs1, columns=['Column 1', 'Column 2', 'Column 3', 'Column 4']) print(df)
方法2:用列表推导式简化代码
通过嵌套列表推导式直接生成二维列表,代码更简洁:
dfs1 = [ [row['Columns'][j]['Value'] for j in range(4)] for row in data_json2['data']['Rows'][:24] ] # 转换为DataFrame import pandas as pd df = pd.DataFrame(dfs1, columns=['Column 1', 'Column 2', 'Column 3', 'Column 4'])
方法3:直接构造字典生成DataFrame
逐行生成包含列名和对应值的字典,再直接转为DataFrame:
import pandas as pd data_rows = [] for row in data_json2['data']['Rows'][:24]: row_dict = { f'Column {j+1}': row['Columns'][j]['Value'] for j in range(4) } data_rows.append(row_dict) df = pd.DataFrame(data_rows) print(df)
内容的提问来源于stack exchange,提问作者user20050294
相关产品推荐
相关产品推荐

