【问题标题】:sorting row by logic conditions pandas按逻辑条件对行进行排序 pandas
【发布时间】:2017-07-28 09:08:47
【问题描述】:

我正在尝试通过排除 ('./.') 对列 sample.single 中的行进行排序。所有数据类型都是对象。我尝试了以下选项。我怀疑特殊字符会影响第二次尝试。数据框由 195 列组成。

我的 gtdata 列:

索引(['sample.single', 'sample2.single', 'sample3.single'] dtype='object')

请指教,谢谢!

gtdata = gtdata[('sample.single')!= ('./.') ]

我收到一个关键错误:KeyError: True

当我尝试时:

gtdata = gtdata[gtdata.sample.single != ('./.') ]

我收到一个属性错误:

AttributeError: 'DataFrame' 对象没有属性'single'

【问题讨论】:

  • 不确定您要做什么。在解释器中输入 ('sample.single')!= ('./.')。它将返回 True。你应该能够找出原因。这意味着 gtdata[('sample.single')!= ('./.') ] 意味着您正在尝试评估 gtdata[True]。大概这没有意义。

标签: python sorting pandas row conditional-statements


【解决方案1】:

不是 100% 确定您要达到的目标,但假设您有包含“./.”的单元格。要过滤掉的字符串,下面是一种方法:

import pandas as pd

# generate some sample data
gtdata = pd.DataFrame({'sample.single': ['blah1', 'blah2', 'blah3./.'], 
                       'sample2.single': ['blah1', 'blah2', 'blah3'], 
                       'sample3.single': ['blah1', 'blah2', 'blah3']})

# filter out all cells in column sample.single containing ./.
gtdata = gtdata[~gtdata['sample.single'].str.contains("./.")]

在 Pandas 中设置子集时,您应该传递一个与 DataFrame 具有相同维度的布尔向量。

您的第一种方法的问题是 ('sample.single')!=('./.') 评估为单个布尔值,而不是布尔向量。您还在比较两个字符串,而不是 DataFrame 中的任何列。

您的第二种方法的问题是 gtdata.sample.single 在 pandas 语法中没有意义。要获得sample.single 列,您必须参考 gtdata['sample.single']。如果您的列名不包含“.”,您可以使用您尝试使用的速记:例如gtdata.sample_single.

我建议查看 documentation 以获取 Pandas DataFrames 的子集。

【讨论】:

  • 谢谢伊多!只需添加一个“\”来转义代码中的特殊字符,但可以! [gtdata = gtdata[~gtdata['sample.single'].str.contains('\./.')]]
猜你喜欢
  • 2019-04-26
  • 2020-07-08
  • 2021-12-13
  • 1970-01-01
  • 2016-09-14
  • 2011-07-30
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多