按逻辑条件pandas排序行

时间:2017-03-07 23:48:02

标签: python sorting pandas row conditional-statements

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

我的gtdata专栏:

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

请指教,谢谢!

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

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

当我尝试:

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

我收到属性错误:

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

1 个答案:

答案 0 :(得分:0)

不是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的子集。