【问题标题】:How to subset dataframe using pandas? [duplicate]如何使用熊猫对数据框进行子集化? [复制]
【发布时间】:2020-07-21 14:24:44
【问题描述】:

我想对可能相邻也可能不相邻的列进行子集化。在这个试点案例中,只有 39 列,因此写出完整的列名是可能的,但很乏味。我要做的只是基于索引的子集列。

df_sub = df.iloc[:,[10,11,29:37]]

但我收到此错误:

File "<ipython-input-46-d9362578c302>", line 1
    df_sub = df.iloc[:,[10,11,29:37]]
                                ^
SyntaxError: invalid syntax

有没有办法对列索引可能不相邻的列进行子集化?

在谷歌上搜索做这样的事情只向我展示了基于列名、彼此相邻的索引或单独输入每个索引的子集方法,例如here。如果有 100 列的混合物怎么办?

【问题讨论】:

  • 我不推荐这个:[10,11,*list(range(29,37))]
  • 这是一个快速的答案。谢谢,@Pygirl。推荐的方式是什么?
  • 其实我现在只能想到这个。一定有其他更好的方法。等待其他答案。
  • 是的。 @Ch3steR,“切片”是我错过的术语。这也许是我很难找到答案的原因。今天重新学习了一些东西。

标签: python pandas


【解决方案1】:

你可以试试这样的:

g = lambda x,y: range(x,y)

[10,11,*g(29,37)]

#[10, 11, 29, 30, 31, 32, 33, 34, 35, 36]

时间对比:

%%timeit -n 1000000
np.r_[10,11,29:37]

每个循环 12.4 µs ± 123 ns(平均值 ± 标准偏差,7 次运行,每次 1000000 次循环)

%%timeit -n 1000000
g = lambda x,y: range(x,y)
[10,11,*g(29,37)]

每个循环 338 ns ± 3.94 ns(平均值 ± 标准偏差,7 次运行,100000 次循环 每个)

【讨论】:

  • 您是否有理由不推荐您放入 cmets 中的代码?减缓?副作用?
  • @user1828605:我不确定它的性能,但它似乎更快。
  • 我的意思是,我们在这里需要几微秒。正在分析的唯一计算成本是调用 numpy 函数可能产生的任何开销
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多