问题 将新列添加到pandas DataFrame时的NaN值


我正在尝试在pandas DataFrame中生成一个新列,该列等于另一个pandas DataFrame中的值。当我尝试创建新列时,我只获取新列值的NaN。

首先我使用API​​调用来获取一些数据,'mydata'DataFrame是按日期索引的一列数据

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

我使用以下代码从CSV获取的下一个DataFrame,它包含许多列数据,其行数与'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”具有月初日期。


8174
2017-10-06 17:13


起源

如果索引不重叠(正如您所描述的那样),那么您确实会获得NaN。您必须更改其中一个的索引,或者如果您确定行数完全相等,只需将值(不带索引)放在新列中(mydata.iloc[:,0].values) - joris
添加'.values'确实有效!谢谢@joris,我会记得关于索引在未来必须是平等的! - gtnbz2nyt


答案:


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

mydata = mydata.set_index(DWDATA.index)

以上内容将更改'mydata'DataFrame的索引以匹配'DWDATA'DataFrame的索引。

由于两个DataFrame的行数完全相同,您还可以将'mydata'的值传递给新的'DWDATA'列:

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

16
2017-10-06 17:52