我有一个包含贡献者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。
有人可以建议如何解决这个问题吗?
答案 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