将系列连接到数据框时创建的NaN列

时间:2019-04-01 16:16:29

标签: python-3.x pandas dataframe

我创建了一个输出变量'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值列生成?

1 个答案:

答案 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列。