Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用NaNs添加两个系列_Python_Pandas - Fatal编程技术网

Python 使用NaNs添加两个系列

Python 使用NaNs添加两个系列,python,pandas,Python,Pandas,我正在学习“Python For Data Analysis”,但我不了解特定的功能。添加两个熊猫系列对象将自动对齐索引数据,但如果一个对象不包含该索引,则返回为NaN。例如,本书: a = Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah']) b = Series([NaN,71000,16000,35000],index=['California', 'Texas', 'Oregon', 'Ohio']

我正在学习“Python For Data Analysis”,但我不了解特定的功能。添加两个熊猫系列对象将自动对齐索引数据,但如果一个对象不包含该索引,则返回为NaN。例如,本书:

a = Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah'])
b = Series([NaN,71000,16000,35000],index=['California', 'Texas', 'Oregon', 'Ohio'])
结果:

    In [63]: a
    Out[63]: Ohio          35000
             Texas         71000
             Oregon        16000
             Utah           5000
    In [64]: b
    Out[64]: California      NaN
             Texas         71000
             Oregon        16000
             Ohio          35000
当我把它们加在一起,我得到这个

    In [65]: a+b
    Out[65]: California       NaN
             Ohio           70000
             Oregon         32000
             Texas         142000
             Utah             NaN
那么为什么犹他州的价值是NaN而不是500?似乎500+NaN=500。有什么好处?我遗漏了什么,请解释一下

更新:


Pandas不假设500+NaN=500,但要求它这样做很容易:
a.add(b,fill_value=0)

默认方法是假设任何涉及NaN的计算结果都是NaN。任何加上NaN的都是NaN,任何除以NaN的都是NaN,等等。如果你想用一些值填充NaN,你必须明确地这样做(正如Dan Allan在他的回答中所显示的那样)。

使用
pd.concat()
更有意义,因为它可以接受更多的列

import pandas as pd
import numpy as np

a = pd.Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah'])
b = pd.Series([np.nan,71000,16000,35000],index=['California', 'Texas', 'Oregon', 'Ohio'])

pd.concat((a,b), axis=1).sum(1, min_count=1)
输出:

California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah            5000.0
dtype: float64

或与3系列:

import pandas as pd
import numpy as np

a = pd.Series([1, np.NaN, 4, 5])
b = pd.Series([3, np.NaN, 5, np.NaN])
c = pd.Series([np.NaN,np.NaN,np.NaN,np.NaN])

print(pd.concat((a,b,c), axis=1).sum(1, min_count=1))

#0    4.0
#1    NaN
#2    9.0
#3    5.0
#dtype: float64

既然您提到了这本书,您可以参考第128页的“算术和数据对齐”部分,其中讨论了这一点返回两者的并集!!我需要add()方法。太棒了,谢谢@dbiamante@DanAllen!已解决:“+”运算符执行两个运算符的并集。我需要的是.add()方法。
import pandas as pd
import numpy as np

a = pd.Series([1, np.NaN, 4, 5])
b = pd.Series([3, np.NaN, 5, np.NaN])
c = pd.Series([np.NaN,np.NaN,np.NaN,np.NaN])

print(pd.concat((a,b,c), axis=1).sum(1, min_count=1))

#0    4.0
#1    NaN
#2    9.0
#3    5.0
#dtype: float64