当前位置: 首页 > 知识库问答 >
问题:

在Pandas中按列名选择两组列

漆雕和雅
2023-03-14

在Loc vs. iloc vs. ix vs. at vs. iat的答案中选择DataFrame?例如。

df = pd.DataFrame(
{'age':[30, 2, 12, 4, 32, 33, 69],
 'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
 'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
 'height':[165, 70, 120, 80, 180, 172, 150],
 'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
 'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']},
 index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia']
)

现在我想要所有的栏目,除了“食物”和“高度”。

我认为类似于df.loc[:,['age':'color','score':'state']]的东西可以工作,但是Python返回SyntaxError:invalid syntax

我知道有一种解决方法df.drop(columns=['food','height'])。然而,在我的现实生活中,我有数百列要删除。键入所有列名是如此低效。

我期待类似于R语言中的dplyr::select(df,-(食物:身高))dplyr::select(df,年龄:颜色,分数:状态)

还阅读了选择/排除Pandas中的列集。

共有2个答案

祁和通
2023-03-14

首先通过Index.get_loc获取列名的位置,然后使用Numpy.r_将所有切片器连接在一起:

a = np.r_[df.columns.get_loc('age'):df.columns.get_loc('color')+1, 
          df.columns.get_loc('score'):df.columns.get_loc('state')+1]

df = df.iloc[:, a]
print (df)
           age  color  score state
Jane        30   blue    4.6    NY
Nick         2  green    8.3    TX
Aaron       12    red    9.0    FL
Penelope     4  white    3.3    AL
Dean        32   gray    1.8    AK
Christina   33  black    9.5    TX
Cornelia    69    red    2.2    TX
马浩淼
2023-03-14

首先,找到位于食物高度(包括)之间的所有列。

c = df.iloc[-1:0].loc[:, 'food':'height'].columns

接下来,筛选与差异/isin/setadi1d-

df[df.columns.difference(c)]

或者,

df.loc[:, ~df.columns.isin(c)]

或者,

df[np.setdiff1d(df.columns, c)]
           age  color  score state
Jane        30   blue    4.6    NY
Nick         2  green    8.3    TX
Aaron       12    red    9.0    FL
Penelope     4  white    3.3    AL
Dean        32   gray    1.8    AK
Christina   33  black    9.5    TX
Cornelia    69    red    2.2    TX
 类似资料:
  • 问题内容: 我想知道Pandas DataFrames中是否有一种优雅而简捷的方式来按数据类型(dtype)选择列。即从DataFrame中仅选择int64列。 详细来说, 先谢谢您的帮助 问题答案: df.loc[:, df.dtypes == np.float64]

  • 问题内容: 据说如果使用group by子句,则select列列表中必须存在group by列名,但是上面的查询不需要选择sourceobjectid。 问题答案: 结果 不是 遇到的第一行。MySQL非常清楚所谓的“隐藏列”的使用。引用文档: MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用

  • 我一直在寻找通过python文档和论坛来选择列的方法,但是关于列索引的每个示例都过于简单。 假设我有一个10x10的数据帧 到目前为止,给出的所有文档只是一个简单的索引示例,如

  • 问题内容: 我想了解MySQL中的某些特定行为。运行“ select @@ version”,我看到我的版本是5.6.34-log。 让我使用生成的表放置样本,以使其更易于重现: 正如标题所建议的那样,我最初搜索的是如何通过别名选择列,以便重用计算所得的字段,从而避免了冗长的查询。如文档中所述,大多数答案要么建议使用子查询,要么使用变量- 一种可读性差,而另一种则不能由自己的数据库开发人员来保证。

  • 本文向大家介绍MySQL 按列名选择,包括了MySQL 按列名选择的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果            

  • 这个问题可能非常愚蠢,但我不知道该怎么做 有一个带有N列的。我需要选择一些列,按列的索引引用,然后将所有值转换为数字,并在我的 我已经通过列名引用(比如完成了这项工作,但仍然坚持使用索引(比如 在这种情况下,对列引用的正确方法是什么?(python 2.7)