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



我创建了一个输出变量'a = pd。Series()',然后使用 for 循环运行多个模拟,将临时存储在"x"中的模拟结果附加到连续列中的"a",每个列都重命名以与模拟编号一致,从第 0 个位置开始,使用以下代码:

a = pandas.concat([a, x.rename(sim_count)], axis=1)

出于某种原因,生成的数据帧在我无法摆脱的第一列模拟结果的左侧包含一列"NaN"值,如下所示(示例显示了三个模拟的结果):

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 值列吗?

基本上,通过 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 列。

最新更新