【问题标题】:Looping over only a certain range of object indices in python在python中只循环一定范围的对象索引
【发布时间】:2018-03-01 20:01:55
【问题描述】:

我正在尝试根据该数据框中的两个预先存在的列附加一个熊猫数据框。我遇到的问题是熊猫数据框的索引是对象格式,而不是整数格式。为了让事情变得更复杂,我只想附加一定范围的数据框,将新列中的剩余单元格保留为“NaN”。为了仅附加数据帧的某个范围,我将不得不使用“for”循环。

这是我的问题:当我有对象索引时,如何循环数据帧的某个范围?

我最初的 pandas 数据框只是...

import pandas as pd

dates = ['2005Q4','2006Q1','2006Q2','2006Q3','2006Q4','2007Q1','2007Q2']
col1 = [ 5.9805, 6.2181, 6.3508, 6.7878, 6.6212, 6.4583, 6.4068 ]
col2 = [ 'NaN', -0.001054985938, -0.121731711952, 0.046275331889, 
         -0.017517211963, -0.023422842422, 0.009072170884 ]

data = pd.DataFrame(
                    {
                     'col1':   col1,
                     'col2':   col2
                     },
                     columns = [
                                'col1',
                                'col2'
                                ],
                     index = dates
                    )

我想做的就是这样......

data['col3'] = 'NaN'

for i in range('2006Q1','2006Q4',1):
    data['col3'][i]  =  data['col1'][i-1] +\
                        data['col2'][i]

天真地,我曾希望 python 能够将索引中的对象名称与与该特定索引关联的实际索引号相关联。例如,如果我将索引定义为给定,python 将能够知道 '2005Q4' 是 index = 0,'2006Q1' 是 index = 1,等等。这样,我可以在 range() 中使用对象字符串函数,它仍然会知道我所指的整数。然而,情况似乎并非如此。

我还需要避免将对象转换为日期格式。将索引保持为“YearQuarter”格式很重要,而且我还没有找到一种简单的使用 pd.to_datetime 的方法来做到这一点。

有没有人对如何在 python 中仅循环特定范围的基于对象的索引有任何建议?

【问题讨论】:

    标签: pandas loops object indexing append


    【解决方案1】:

    .index() 与列表一起使用会返回您要查找的项目的索引。尝试对您的 for 循环进行此调整。

    for i in range(dates.index('2006Q1'),dates.index('2006Q4'),1):
    

    显然,更有效的方法可以做到这一点。 .shift() 随心所欲地向上或向下移动整个列:

    data['col3'] = data.col1 - data.col2.shift(-1)
    

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 2016-11-16
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2017-05-17
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多