如何在Python的for循环中从np.array创建DataFrame
解决方法
你的代码核心问题是没有将循环生成的每一行数据case_i收集到all_cases中,且初始空numpy数组直接append会导致维度混乱,以下是几种可行的修改方案:
方案1:用列表收集数据(推荐,效率更高)
用Python列表存储每一行,最后转成DataFrame,代码简洁高效:
import numpy as np import pandas as pd all_cases = [] # 用列表替代空numpy数组 for i in range(1, 4): subSoil_array = [i, 2*i, 3*i] case_i = subSoil_array + [100*i] # 列表拼接替代np.append all_cases.append(case_i) # 将当前行加入列表 # 转换为3行4列的DataFrame df = pd.DataFrame(all_cases) print(df)
输出结果:
0 1 2 3 0 1 2 3 100 1 2 4 6 200 2 3 6 9 300
方案2:用numpy数组堆叠(保留numpy操作)
若坚持用numpy数组处理,需将每个case_i转为二维数组后垂直堆叠,避免维度扁平化:
import numpy as np import pandas as pd all_cases = np.empty((0, 4)) # 初始化0行4列的空二维数组 for i in range(1, 4): subSoil_array = [i, 2*i, 3*i] case_i = np.append(subSoil_array, 100*i).reshape(1, 4) # 转为1行4列的二维数组 all_cases = np.vstack((all_cases, case_i)) # 垂直堆叠到总数组 df = pd.DataFrame(all_cases) print(df)
额外:不用循环的简洁写法(可选)
若无需强制使用for循环,用numpy广播机制可一行生成所需数组:
import numpy as np import pandas as pd i_arr = np.arange(1, 4) all_cases = np.column_stack([i_arr, 2*i_arr, 3*i_arr, 100*i_arr]) df = pd.DataFrame(all_cases) print(df)
内容的提问来源于stack exchange,提问作者Ashi
相关产品推荐
相关产品推荐

