【问题标题】:Simple for loop in pandas熊猫中的简单for循环
【发布时间】:2013-10-03 11:11:37
【问题描述】:

我有一个关于熊猫的简单索引问题。 我想做一个简单的 for 循环来遍历数字 1 到 5。 我在如何执行此操作时遇到了熊猫索引问题(尽管我确信它很简单!)

我的粗略代码:

def averaged_rel_track(current_tracks, rel_values):

    current_tracks['rel_values']=rel_values
    current_tracks=current_tracks.set_index('candidate')

    #I would like this line to loop over numbers 1 to 5
    b_1= current_tracks.rel_values.loc['1']

我尝试过的:

for i in range(1, 6):
    b=current_tracks.rel_values.iloc[i]

for i in range (1, 6):
    b = current_tracks.rel_values[i]

for i in range (1, 6):
   b=current_tracks.rel_values['i']

以及其他各种类似的变体(包括.ix, .iloc, .loc

【问题讨论】:

  • 循环遍历索引是最后的手段。你能给出更大的图景吗? (你想做什么?)可能有一些矢量化的方法可以更简洁、更快地做到这一点。
  • 我认为它很慢,但我从来没有新的更好的方法来做到这一点! (新手)下面的汉斯回答有另一种我认为更好的方法吗?基本上我有一个 3 列的数据框,其中一列称为 'candidate',它的范围为 1、5。基本上我想依次选择 1、2、3、4、5 的所有值.
  • 我正在考虑更大的图景,但这可能超出了您的问题范围。据推测,您正在对每个值(1、2、3、4)做一些事情,我的问题是,您在做什么?
  • 我正在对对应于 1、2、3、4 或 5 的所有数据进行滚动平均。希望这是有道理的!
  • 也许是pd.concat([pd.rolling_mean(grp) for _, grp in current_tracks.groupby(rel_values)]),具体取决于您的意思。考虑使用您的数据样本和所需输出的样本打开一个新问题。绝对有一种简单的方法可以做到这一点,也许在一行中。

标签: python for-loop pandas


【解决方案1】:

您的第一次尝试看起来还不错;我想你可以使用:

for i in range(5):
    b = current_tracks.rel_values.iloc[i] # by standard 0-based sequence index

for i in range(1, 6):
    b = current_tracks.rel_values.loc[i] # by 1-based track number

但你可能想避免'for i in range(...)',这不是pythonic:

for b in current_tracks.rel_values.loc[1:5]: # or .iloc[:5]
    ...

注意 .loc[1:5] 包含最后一个索引值,而 .iloc 不包含。这比听起来更直观,因为 .iloc 使用标准的 Python 索引,而 .loc 支持任何类型的特定于应用程序的索引,并且在非整数情况下可能无法“增加”结束索引。

【讨论】:

  • 感谢汉斯的帮助。但是,我想知道' ' 有问题吗?好像我在只使用单个值时添加引号,即 '1' 它可以工作,但如果没有引号则不会。
  • 是的,正如我所写,.loc 支持任何类型的特定于应用程序的索引,包括字符串。我不知道您是如何创建 DataFrame 的,以及为什么类型似乎是字符串(对象),但也许这样的事情会有所帮助:df.index = pandas.Index(df.index.values.astype(int))
  • 从csv导入数据框,然后将其中一列设置为索引。此专栏重复出现 1-5。会试试的,谢谢
  • 其实改变列/索引类型最好直接用pandas的方式:df.index = df.index.astype(int)
猜你喜欢
  • 2022-07-18
  • 2022-11-04
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多