Pandas:使用iloc检索数据与输入索引不匹配

时间:2018-04-21 22:03:06

标签: python pandas dataframe indexing

我有一个包含贡献者ID和contributor_message的数据集。我想要使​​用相同的消息检索所有样本,例如,contributor_message =='我支持此提案,因为......'。

我使用data.loc [data.contributor_message =='我支持此提案,因为......']。index - >所以基本上你可以使用相同的消息获取DataFrame中的索引,比如那些索引是1,2,50,9350,30678 ......

然后我尝试了data.iloc [[1,2,50]],这给了我正确答案,即索引与DataFrame索引匹配。

但是,当我使用data.iloc [9350]或更高的索引时,我将 NOT 获取相应的DataFrame索引。说我这次在DataFrame中得到了15047。

有人可以建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

当您的索引未与其整数位置对齐时会发生这种情况。

请注意,pd.DataFrame.loc用于按索引切片,pd.DataFrame.iloc用于按整数位置切片。

以下是一个最小的例子。

df = pd.DataFrame({'A': [1, 2, 1, 1, 5]}, index=[0, 1, 2, 4, 5])

idx = df[df['A'] == 1].index

print(idx)  # Int64Index([0, 2, 4], dtype='int64')

res1 = df.loc[idx]
res2 = df.iloc[idx]

print(res1)
#    A
# 0  1
# 2  1
# 4  1

print(res2)
#    A
# 0  1
# 2  1
# 5  5

您有2个选项可以解决此问题。

选项1

使用pd.DataFrame.loc按索引切片,如上所述。

选项2

重置索引并使用pd.DataFrame.iloc

df = df.reset_index(drop=True)
idx = df[df['A'] == 1].index

res2 = df.iloc[idx]

print(res2)
#    A
# 0  1
# 2  1
# 3  1