我(我想)知道如何检查pandas系列的索引中是否包含一个值,但是在下面的示例中我无法使其正常工作。也许是错误吗?
首先,我生成一些随机数:
import numpy as np
import pandas as pd
some_numbers = np.random.randint(0,4,size=10)
print(some_numbers)
输出:
[0 2 2 3 1 1 2 2 3 2]
然后,我用这些数字创建一个序列并计算其频率
s = pd.Series(some_numbers)
gb = s.groupby(s).size() / len(s)
print(gb)
输出:
0 0.1
1 0.2
2 0.5
3 0.2
dtype: float64
到目前为止,太好了。但是我不明白下一行代码的输出:
1.3 in gb
输出:
True
输出不是False吗? (我在Python 3.6.2上有pandas 0.20.3)
我知道我可以使用
1.3 in list(gb.index)
但是如果系列很大,这不是很有效。
import pandas as pd
s = pd.Series([.1,.2,.3])
print(s)
0 0.1
1 0.2
2 0.3
dtype: float64
3.4 in s
False
但是,请等待...
s = pd.Series([.1,.2,.3,.4])
print(s)
0 0.1
1 0.2
2 0.3
3 0.4
dtype: float64
3.4 in s
True
答案 0 :(得分:10)
我认为问题在于gb.index
是一个int64
索引:
>>> gb.index
Int64Index([0, 1, 2, 3], dtype='int64')
>>> type(gb.index)
<class 'pandas.core.indexes.numeric.Int64Index'>
,因此在与1.3
进行比较时,该值将转换为int值。一些证据表明,直到3.99999
的值都将返回True
,因为将其转换为int
会给您3
,但是,4.000001 in gb.index
返回{{1 }},因为将False
转换为4.000001
会返回int
(不在4
中)
如果将其强制为浮点索引,则最终会得到假,因为gb.index
不在1.3
中。
Float64Index([0.0, 1.0, 2.0, 3.0], dtype='float64')
经过测试 >>> 1.3 in gb.index.astype('float')
False
,pandas '0.21.1'
答案 1 :(得分:0)
使用Notes
属性。我确实认为您发现了一个错误。这可能应该在github上提交。
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Edit;
TMemoField(Table1.FieldByName('Notes')).LoadFromFile('D:\test.rtf');
end;