【问题标题】:NaN values when new column added to pandas DataFrame将新列添加到 pandas DataFrame 时的 NaN 值
【发布时间】:2014-12-01 00:17:18
【问题描述】:

我正在尝试在 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”有月初日期。

【问题讨论】:

  • 如果索引不重叠(如您所描述的),那么您确实会得到 NaN。您必须更改两者之一的索引,或者如果您确定行数完全相等,只需将值(无索引)放入新列 (mydata.iloc[:,0].values)
  • 添加“.values”确实有效!谢谢@joris,我会记住将来索引必须相等的那一点!

标签: python pandas dataframe nan


【解决方案1】:

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

mydata = mydata.set_index(DWDATA.index)

以上将改变'mydata' DataFrame的索引以匹配'DWDATA' DataFrame的索引。

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

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

【讨论】:

  • 这项工作正常,但不再推荐值,至少对于熊猫团队的生产而言。他们建议使用 .to_numpy()
猜你喜欢
  • 2023-01-04
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2020-02-01
  • 1970-01-01
  • 2016-12-30
相关资源
最近更新 更多