我试图通过排除('./。')对列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'
答案 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的子集。