代码之家  ›  专栏  ›  技术社区  ›  mystery man

使用加法(+)运算符连接序列?

  •  1
  • mystery man  · 技术社区  · 7 年前

    我想这么做 .append() 一些熊猫系列'在一起,没有想到我只是做了 total=series1+series2+series3 .

    每个系列的长度分别为2199902171175和178989 sum(pd.isnull(i) for i in total) = 2214596

    P、 S所有3个系列“都没有空值开始,这是否与合并3个不同长度的系列”有关,这会产生缺失值?即使如此,为什么要创建aer 2214596空值?

    2 回复  |  直到 5 年前
        1
  •  4
  •   cs95 abhishek58g    5 年前

    如果你想 追加 连续剧,你做错了。这个 + 接线员呼叫 .add 结果是 正在添加 NaN 正在生成。

    如果你想 追加 这些组合成一个长系列,您可以使用 pd.concat :

    pd.concat([s1, s2, s3], ignore_index=True)
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64
    

    如果你要使用 append ,您可以在循环中执行此操作,也可以使用 reduce :

    s = s1
    
    for i in [s2, s3]:
        s = s.append(i, ignore_index=True)
    
    s
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64
    
    from functools import reduce
    
    reduce(lambda x, y: x.append(y, ignore_index=True), [s1, s2, s3])
    
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64
    

    pd。康卡特 np.concatenate .

        2
  •  2
  •   jezrael    7 年前

    如果 sum 序列所有索引均对齐。因此,如果某个索引存在于 series1 而不是在另一个 Series 收到 NaN s

    所以需要 add fill_value=0 :

    s = s1.add(s2, fill_value=0).add(s3, fill_value=0)
    

    示例:

    s1 = pd.Series([1,2,4,5])
    s2 = pd.Series([4,7], index=[10,11])
    s3 = pd.Series([40,70], index=[2,4])
    
    s = s1.add(s2, fill_value=0).add(s3, fill_value=0)
    print (s)
    0      1.0
    1      2.0
    2     44.0
    3      5.0
    4     70.0
    10     4.0
    11     7.0
    dtype: float64
    

    但如果需要,将它们附加在一起(或使用 concat 如前所述 cᴏʟᴅsᴘᴇᴇᴠ):

    s = s1.append(s2, ignore_index=True).append(s3, ignore_index=True)
    print (s)
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64
    

    和numpy替代方案:

    #alternative, thanks cᴏʟᴅsᴘᴇᴇᴅ - np.concatenate([s1, s2, s3])
    s = pd.Series(np.concatenate([s1.values, s2.values, s3.values]))
    
    print (s)
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64
    

    如果需要,请使用 + 对于附加,则需要将序列转换为列表:

    s = pd.Series(s1.tolist() + s2.tolist() + s3.tolist())
    print (s)
    0     1
    1     2
    2     4
    3     5
    4     4
    5     7
    6    40
    7    70
    dtype: int64