2014-10-06 82 views
9

我试图在等于另一个pandas DataFrame中的值的pandas DataFrame中生成一个新列。当我尝试创建新列时,我只是获取新列值的NaN。将新列添加到熊猫时的NaN值DataFrame

首先我使用API​​调用来获取一些数据,和“MYDATA”据帧是按日期

mydata = Quandl.get(["YAHOO/INDEX_MXX.4"], 
        trim_start="2001-04-01", trim_end="2014-03-31", 
        collapse="monthly") 

下一个数据帧我从CSV获得与下面的代码索引数据的一列,并它包含了许多列数据具有相同的行数为“MYDATA”

DWDATA = pandas.DataFrame.from_csv("filename", 
            header=0, 
            sep=',', 
            index_col=0, 
            parse_dates=True, 
            infer_datetime_format=True) 

然后我尝试生成这样的新列:

DWDATA['MXX'] = mydata.iloc[:,0] 

同样,我只是得到NaN值。有人可以帮助我理解为什么这样做以及如何解决?从我看过的内容看,我的索引可能有些问题。索引是每个DataFrame中的日期,但'mydata'具有月末日期,而'DWDATA'具有月初日期。

+5

如果指数不重叠(如你描述),那么你确实会得到NaNs。您必须更改两者中的一个的索引,或者如果您确定行数完全相等,则只需将这些值(无索引)放入新列(“mydata.iloc [:,0] .values' ) – joris 2014-10-06 17:36:56

+0

添加'.values'确实奏效!谢谢@joris,我会记住这些指标在将来必须是平等的! – gtnbz2nite 2014-10-06 17:42:48

回答

12

因为索引不完全相等,所以会产生NaN。必须更改一个或两个索引以匹配。例如:

mydata = mydata.set_index(DWDATA.index) 

上面将改变“MYDATA”数据帧的索引,以匹配“DWDATA”数据帧的索引。

由于行数是两个DataFrames完全相等,你也可以只通过“MYDATA”的价值观,以新的“DWDATA”栏:

DWDATA['MXX'] = mydata.iloc[:,0].values