排序数据框后,为什么loc和iloc之间有区别?

时间:2019-12-29 11:03:39

标签: python pandas dataframe

我有一个带有日期列的数据框。按日期排序后,我希望可以按照排序顺序从数据框中读取数据。但是,使用iloc仅提供排序后的数据,但使用loc似乎可以保留排序之前的序列。有没有办法解决这个问题。我想使用“ loc”,但从数据框中获取排序后的数据。

import pandas as pd
client_dictionary = {'name': ['Michael', 'Ana', 'Sean'],
                     'country': ['UK', 'UK', 'USA'],
                     'age': [10, 51, 13],
                     'latest date active': ['07-05-2019', '23-12-2019', '03-04-2016']}
df = pd.DataFrame(client_dictionary)
df.head()
df['latest date active'] = df['latest date active'].astype('datetime64[ns]')
df.sort_values(by='latest date active', inplace=True)
df.reset_index()

for i in range(0, len(df)):
    print("With loc: " + str(df.loc[i, 'latest date active']) + ", with iloc: " + str(df.iloc[i, 3]))

运行上面的代码时,我得到以下输出:

With loc: 2019-07-05 00:00:00, with iloc: 2016-03-04 00:00:00
With loc: 2019-12-23 00:00:00, with iloc: 2019-07-05 00:00:00
With loc: 2016-03-04 00:00:00, with iloc: 2019-12-23 00:00:00

1 个答案:

答案 0 :(得分:0)

重置索引时,您必须重新分配DataFrame或传递inplace参数:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html

df.sort_values(by='latest date active', inplace=True)
df.reset_index(inplace=True)

现在它们应该等效。