我在python中使用Dataframe
并尝试根据多个列值选择行索引。下面是我的数据帧的第100行值:
>>> df.loc[100]
id 100
iid 9cdb7709-38f8-442a-812a-986b5b148161
lat -37.8294
lon 144.979
name Doryanthes excelsa
Name: 100, dtype: object
我想通过以下命令选择id
为100且lat
为-37.8294的行:
>>> df[(df['id'] == 100) & (df['lat'] == -37.8294)].index
Int64Index([], dtype='int64')
上面的命令返回一个空索引。我不明白我可以通过df.loc[100]
命令获取值,但为什么我不能从上面的命令中获取行索引?
答案 0 :(得分:5)
您想要选择float
,但存在精度问题,因此请勿匹配并返回空数据框
所以需要numpy.isclose
:
df1 = df[(df['id'] == 100) & (np.isclose(df['lat'],-37.8294))]
样品:
df = pd.DataFrame({'id':[100,200],
'lat':[-37.82940007,-37.82]})
print (df)
id lat
0 100 -37.8294
1 200 -37.8200
df1 = df[(df['id'] == 100) & (df['lat'] == -37.8294)]
print (df1)
Empty DataFrame
Columns: [id, lat]
Index: []
df1 = df[(df['id'] == 100) & (np.isclose(df['lat'],-37.8294))]
print (df1)
id lat
0 100 -37.8294