【问题标题】:Creating new column using for loop returns NaN value in Python/Pandas使用 for 循环创建新列在 Python/Pandas 中返回 NaN 值
【发布时间】:2018-04-02 17:32:16
【问题描述】:

我正在使用 Python/Pandas 来操作数据框。我有一列“月”(值从 1.0 到 12.0)。现在我想创建另一列“季度”。当我写 -

for x in data['month']:
print ((x-1)//3+1)

我得到正确的输出,即季度数(1、​​2、3、4 等)。

但我无法将输出分配给新列。

for x in data['month']:
data['quarter'] = ((x-1)//3 + 1)

这会创建缺少值或“NaN”值的四分之一列 -

我的问题是为什么我在创建列时缺少值?

注意:我使用的是 python 3.6 和 Anaconda 1.7.0。 'data' 是我正在使用的数据框。最初我只有使用日期转换为月份和年份的日期

data['month'] = pd.DatetimeIndex(data['first_approval']).month

有趣的是,本月的专栏显示 dtype: float64 。我已阅读 somewhere "dtype('float64') is equivalent to None" 但我没有清楚地理解该声明。任何建议或帮助将不胜感激。

这是我一开始的:

这是我运行 for 循环后得到的:

【问题讨论】:

  • 你可以发布你的dataFrame示例数据
  • 添加在帖子底部。

标签: python-3.x date dataframe


【解决方案1】:

从日期获取季度的最简单方法是

data['quarter'] = pd.DatetimeIndex(data['date']).quarter

与您获取月份信息的方式相同。

下面的行会将整个列设置为从计算中获得的最后一个值。 (可能有一些值不是正确的日期格式,因此是 NaN)

data['quarter'] = ((x-1)//3 + 1) 

【讨论】:

  • 它有效。没想到 .quarter 会以同样的方式工作。现在我明白了为什么我在季度列中得到 NaN。谢谢你的解释。还有一个问题 - 那么,如果我想在列上使用任何计算来创建一个新的,比如 for 循环或 if else,我该怎么做? @Rehan Azher 展示了一种使用 lambda 函数的方法。有没有其他办法?
  • 您可能必须使用 df.loc/iloc/at/iat。尽管 lambda 是首选方式,除非您要运行大量计算/代码。
【解决方案2】:

试试下面的:

df['quarter'] = df['month'].apply(lambda x: ((x-1)//3 + 1))

【讨论】:

  • 它有效。目前还没用过lambda,需要查看文档。
  • 很高兴为您介绍Python的好东西,请采纳。
猜你喜欢
  • 2021-05-26
  • 2015-12-08
  • 2021-06-25
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多