如何按列值选择行索引

时间:2017-09-11 12:10:24

标签: python pandas

我在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]命令获取值,但为什么我不能从上面的命令中获取行索引?

1 个答案:

答案 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