【问题标题】:Sum of dataframe columns to another dataframe column Python gives NaN数据框列与另一个数据框列的总和 Python 给出 NaN
【发布时间】:2020-08-02 15:39:25
【问题描述】:

我想汇总数据框的行和列(pdfwdf)并将结果保存在另一个数据框列(to_hex)中。 我为一个数据框尝试了它并且它有效。它对另一个不起作用(它给出 NaN)。我无法理解有什么区别。

to_hex = pd.DataFrame(0, index=np.arange(len(sasiedztwo)), columns=['ID','podroze','p_rozmyte'])
to_hex.loc[:,'ID']= wdf.index+1
to_hex.index=pdf.index
to_hex.loc[:,'podroze']= pd.DataFrame(pdf.sum(axis=0))[:]
to_hex.index=wdf.index
to_hex.loc[:,'p_rozmyte']= pd.DataFrame(wdf.sum(axis=0))[:]

pdf 数据框是这样的:

   0  1   2  3  4  5  6  7     8
0  0  0  10  0  0  0  0  0   100
1  0  0   0  0  0  0  0  0     0
2  0  0   0  0  0  0  0  0     0
3  0  0   0  0  0  0  0  0     0
4  0  0   0  0  0  0  0  0     0
5  0  0   0  0  0  0  0  0     0
6  0  0   0  0  0  0  0  0     0
7  0  0   0  0  0  0  0  0  1000
8  0  0   0  0  0  0  0  0     0

这是wdf

    0    1      2    3      4      5      6      7       8
0  2.5  5.0   35.0  0.0   27.5   55.0   25.0   50.0   102.5
1  0.0  0.0    5.0  0.0    0.0    0.0    0.0    0.0   300.0
2  0.0  0.0    2.5  0.0    0.0    0.0    0.0    0.0    25.0
3  0.0  0.0    5.0  0.0    0.0    0.0    0.0    0.0   300.0
4  0.0  0.0    2.5  0.0    0.0    0.0    0.0    0.0   525.0
5  0.0  0.0    0.0  0.0    0.0    0.0    0.0    0.0   250.0
6  0.0  0.0    2.5  0.0    0.0    0.0    0.0    0.0   525.0
7  0.0  0.0  250.0  0.0  250.0  500.0  250.0  500.0  1000.0
8  0.0  0.0    0.0  0.0    0.0    0.0    0.0    0.0   500.0

这是to_hex中的结果:

  ID  podroze  p_rozmyte
0   1        0        NaN
1   2        0        NaN
2   3       10        NaN
3   4        0        NaN
4   5        0        NaN
5   6        0        NaN
6   7        0        NaN
7   8        0        NaN
8   9     1100        NaN

【问题讨论】:

  • 可以添加示例数据吗?

标签: python dataframe


【解决方案1】:

解决方案:
解决此问题的一种方法是按如下方式修改您的代码:

to_hex.loc[:,'ID']= wdf.index+1
# to_hex.index=pdf.index                   # no need
to_hex.loc[:,'podroze']= pdf.sum(axis=0)   # modified; directly use the series output from SUM()
# to_hex.index=wdf.index                   # no need
to_hex.loc[:,'p_rozmyte']= wdf.sum(axis=0) # modified

然后你得到:

    ID  podroze p_rozmyte
0   1   0        2.5
1   2   0        5.0
2   3   10       302.5
3   4   0        0.0
4   5   0        277.5
5   6   0        555.0
6   7   0        275.0
7   8   0        550.0
8   9   1100     3527.5

我认为你在一种情况下得到 NaN 而在另一种情况下得到正确值的原因在于to_hex.dtypes

ID           int64
podroze      int64
p_rozmyte    int64
dtype: object

如您所见,to_hex 数据框的列类型为 int64。当您添加 pdf 数据框时这很好(因为它具有相同的 dtype)

pd.DataFrame(pdf.sum(axis=0))[:].dtypes
0    int64
dtype: object

但添加wdf时不起作用:

pd.DataFrame(wdf.sum(axis=0))[:].dtypes
0    float64
dtype: object

【讨论】:

  • 是的,我认为这就是原因...如何将 to_hex['podroze'] 的类型更改为浮动?
  • 工作,谢谢。它仍然不适用于更复杂的数据,这可能意味着我犯了一些数据依赖错误。
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2023-02-13
  • 2021-06-11
  • 2022-11-12
相关资源
最近更新 更多