使用for循环创建新列在Python / Pandas中返回NaN值

时间:2018-04-02 17:32:16

标签: python-3.x date dataframe

我正在使用Python / Pandas来操纵数据框。我有一个列'月'(值从1.0到12.0)。现在我想创建另一个列'quarter'。当我写 -

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

我得到适当的输出,即四分之一数字(1,2,3,4等)。 enter image description here

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

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

这会创建缺少或“NaN”值的季度列 - like this

我的问题是为什么我在创建列时会失去价值?

注意:我使用的是python 3.6和Anaconda 1.7.0。 'data'是我正在使用的数据框。最初我只使用

转换为月份和年份的日期

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

有趣的是,本月专栏显示了dtype:float64。我读过somewhere“dtype('float64')相当于None”但我不明白这句话。任何建议或帮助将受到高度赞赏。

这就是我在开始时所拥有的:enter image description here

这是我在运行for循环后得到的结果:enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

尝试使用以下内容:

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