我在一个制表符分隔的文件test.tsv中有以下数据。

Class   Length  Frag
I   100 True
I   200 True
P   300 False
I   400 False
P   500 True
P   600 True
N   700 True

我已经将数据加载到一个pandas.DataFrame对象中,在任何一个Class=I和Frag=True的地方,我都想设置Class=F。The following code似乎不起作用。我做错了什么,我该怎么做?
import pandas
data = pandas.read_table('test.tsv')
data.loc[(data.Class == 'I') & (data.Frag is True), 'Class'] = 'F'

最佳答案

在你的队伍里

data.loc[(data.Class == 'I') & (data.Frag is True), 'Class'] = 'F'

你不应该使用isis测试标识,而不是相等。所以当你问是否data.Frag is True时,它是在比较Series对象data.Frag并问它是否与True是同一个对象,这不是真的。您真的想使用==,所以得到一系列结果:
>>> data.Frag is True
False
>>> data.Frag == True
0     True
1     True
2    False
3    False
4     True
5     True
6     True
Name: Frag, dtype: bool

不过,既然我们要处理一系列bools,那么== True部分不会添加任何内容,我们可以删除它:
>>> data.loc[(data.Class == 'I') & (data.Frag), 'Class'] = 'F'
>>> data
  Class  Length   Frag
0     F     100   True
1     F     200   True
2     P     300  False
3     I     400  False
4     P     500   True
5     P     600   True
6     N     700   True

10-06 00:01