我在一个制表符分隔的文件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'
你不应该使用
is
。is
测试标识,而不是相等。所以当你问是否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