我创建了一个输出变量'a = pd.Series()',然后使用for循环运行许多模拟,这些模拟将暂时存储在'x'中的模拟结果附加到其中的'a'中。连续的列,每个列的重命名都与模拟编号重合,使用以下代码从第0个位置开始:
a = pandas.concat([a, x.rename(sim_count)], axis=1)
由于某种原因,结果数据框在我无法摆脱的模拟结果的第一列的左侧包括一列“ NaN”值,如下所示(示例显示了三个模拟的结果): / p>
0 0 1 2
0 NaN 0.136799 0.135325 -0.174987
1 NaN -0.010517 0.108798 0.003726
2 NaN 0.116757 0.030352 0.077443
3 NaN 0.148347 0.045051 0.211610
4 NaN 0.014309 0.074419 0.109129
有什么主意如何防止此NaN值列生成?
答案 0 :(得分:0)
基本上,通过pd.Series()创建输出变量,您将创建一个空数据集。这在串联中继续进行,空数据集的大小定义为与x [sim_count]相同的大小(很好,行数相同)。 Python / Pandas知道表示此“空”系列的唯一方法是使用一系列NaN值。当您连接时,您实际上是在说:我想将我的新数据框/系列添加到“空”系列上,而空系列只会得到NaN。
一种更有效的方法是将“ a”分配给数据帧然后进行连接。
a = pd.DataFrame()
a = pandas.concat([a, x.rename(sim_count)], axis=1)
您可能会问自己为什么这样做有效,并使用pd.Series()强制输入一列NaN。我的理解是,数据框在内存中为要添加的数据创建了一个空位置(即,您将新数据放入一个空数据框),而当您执行pd.concat([pd.Series(),x.rename( sim_count)],axis1)告诉熊猫,空序列(pd.Series())很重要,应该保留,并且应该将新数据添加到“ a”上。因此,NaNs列。