美文网首页python我爱编程
pandas的两个DataFrame相加

pandas的两个DataFrame相加

作者: xushiluo | 来源:发表于2016-05-12 20:51 被阅读10986次

    最近在使用Python的pandas库时,涉及到需要往一个DataFrame添加一些噪声,噪声可以使用numpy的随机函数完成。但是相加时出现了问题。

    一、环境

    • windows 7 64bit
    • Python 2.7.10 64bit

    二、问题

    首先导入pandas、numpy库

    import pandas as pd
    import numpy as np
    
    1. 先新建一个DataFrame,代码如下:
    df1 = pd.DataFrame(np.random.randn(3, 5), columns=['a', 'b', 'c', 'd', 'e'])
    

    df1的值如下:

              a         b         c         d         e
    0 -0.519928  2.741647  1.731499  0.492604 -0.751538
    1  0.082676  0.293655 -0.664515 -1.158618 -0.823970
    2 -0.170181  0.491790  0.600444 -0.160671  1.275372
    
    1. 再新建一个噪声的DataFrame,如下:
    noise_df = pd.DataFrame(np.random.random((3,5)))
    

    noise_df的值如下:

              0         1         2         3         4
    0  0.790597  0.917634  0.792538  0.804462  0.311289
    1  0.389426  0.768850  0.832729  0.676595  0.097639
    2  0.338827  0.270338  0.644152  0.907075  0.920115
    
    1. 将df1添加一些噪声,即加上noise_df
    new_df = df1 + noise_df
    

    可是得到的new_df结果全身NaN值,如下:

        0   1   2   3   4   a   b   c   d   e
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    

    仔细观察发现,列名分别是0 1 2 3 4和a b c d e
    考虑一下,可能是列名不同的原因导致的,看pandas的文档,证实了这一点。

    那么解决办法就来了

    三、解决办法

    将上面的noise_df,指定列名称。 列名称就使用df1的列名称。代码如下:

    noise_df = pd.DataFrame(np.random.random(df1.shape),columns=df1.columns)
    

    再次将df1加上noise_df,这次没有错误了。

    new_df = df1 + noise_df
    print(new_df)
    

    相关文章

      网友评论

        本文标题:pandas的两个DataFrame相加

        本文链接:https://www.haomeiwen.com/subject/ymuprttx.html