【问题标题】:Pandas dataframe subtraction produces excess columns filled with NaN valuesPandas 数据帧减法会产生用 NaN 值填充的多余列
【发布时间】:2020-09-25 06:55:02
【问题描述】:

我有两个 pandas 数据框,每个都是 (15, 1) 形状。

当从另一个中减去一个时,结果是一个 (15, 15) 形状的数据框。第一列给出了正确的减法值,但其他十四列用 NaN 值填充。 (我使用传统的减法符号和 .sub() 得到相同的结果)

为什么要增加 14 列?结果不应该是 (15, 1) 数据帧吗?

数据框是另一个数据框的部分的串联,因此是列/行标签。

【问题讨论】:

  • 你的减法代码是什么?
  • @jezrael 类似于df3 = df1.sub(df2)df3 = df1 - df2
  • print (df1.info())print (df2.info()) 是什么?
  • @jezrael 啊,这可能已经发现了问题。其中一个是真正的系列,另一个是一列 15 个条目的 df。没有意识到这一点,我试图从一个系列中分出一个 df 。并切换两者(尽管值为负)得到了填充 NaN 值的不需要的列。我不知道 info()
  • 是的,这是原因。就像在我的示例中一样 df1.sub(df2['B'])

标签: pandas dataframe


【解决方案1】:

我认为您需要减去 Series - 选择两列:

np.random.seed(2020)

df1 = pd.DataFrame({'A':np.random.randint(10, size=15)})
df2 = pd.DataFrame({'B':np.random.randint(10, size=15)})

s = df1['A'].sub(df2['B'])
print (s)
0    -3
1     2
2    -2
3     6
4    -1
5    -5
6     1
7     4
8    -1
9    -1
10    3
11    0
12   -2
13    1
14   -4
dtype: int32

或者在DataFrame.sub中选择第二个axis=0

s = df1.sub(df2['B'], axis=0)
print (s)
    A
0  -3
1   2
2  -2
3   6
4  -1
5  -5
6   1
7   4
8  -1
9  -1
10  3
11  0
12 -2
13  1
14 -4

【讨论】:

  • 我对熊猫不是很熟悉。与从 df1 中减去整个 df2 相比,将列 B 命名为从 A 中减去会产生不同的结果吗?
  • @tcolbert - 我认为它看起来更复杂,您可以查看this 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2018-12-02
  • 2020-11-14
  • 1970-01-01
  • 2021-05-09
  • 2020-08-15
相关资源
最近更新 更多