2017-03-07 86 views
-1

我想通过排除('./。')来对列sample.single中的行进行排序。所有的数据类型都是对象。我尝试了下面的选项。我怀疑这个特殊角色正在危及第二次尝试。数据框由195列组成。按逻辑条件排序行pandas

我gtdata列:

指数([ 'sample.single', 'sample2.single', 'sample3.single'] = D型 '对象')

请指教,谢谢!

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

我收到一个关键错误:KeyError异常:真

当我尝试:

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

我收到一个属性错误:

AttributeError的: '据帧' 对象没有属性'单'

+1

不知道你在做什么。输入('sample.single')!=('./。')到解释器中。它将返回True。你应该能够解决原因。这意味着gtdata [('sample.single')!=('./。')]表示您正在尝试评估gtdata [True]。想必这没有意义。 – Denziloe

回答

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("./.")] 

当子集化的熊猫,你应该传递一个布尔值向量与尺寸相同的数据帧。

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

第二种方法的问题是gtdata.sample.single在熊猫语法中没有意义。要得到sample.single列,你必须参考的是gtdata ['sample.single']。如果列名不包含“。”,则可以使用您尝试使用的简写形式:例如gtdata.sample_single

我建议您查看documentation以了解Pandas DataFrames的子集。

+0

谢谢伊多!只需添加一个'\'来转义代码中的特殊字符,但是可行! [gtdata = gtdata [〜gtdata ['sample.single']。str.contains('\ ./。')]] – lager