我的问题是有关下面的FOR循环的,我看到Kaggle上的著名数据科学家正在使用它。但是,它似乎对我不起作用。
Python 3.66。 熊猫0.23.4
train = pd.DataFrame({'id': [2, 3, 1], 'time':['2017-04-17 22:23:22', '2018-05-22 14:20:00', '2017-01-09 08:02:14']})
test = pd.DataFrame({'id': [2, 3, 1], 'time':['2017-04-17 22:23:22', '2018-05-22 14:20:00', '2017-01-09 08:02:14']})
train
>>> id time
>>> 0 2 2017-04-17 22:23:22
>>> 1 3 2018-05-22 14:20:00
>>> 2 1 2017-01-09 08:02:14
train.sort_values('time', ascending=True)
>>> id time
>>> 2 1 2017-01-09 08:02:14
>>> 0 2 2017-04-17 22:23:22
>>> 1 3 2018-05-22 14:20:00
for data in [train, test]:
data = data.sort_values('time', ascending=True)
train
>>> id time
>>> 0 2 2017-04-17 22:23:22
>>> 1 3 2018-05-22 14:20:00
>>> 2 1 2017-01-09 08:02:14
答案 0 :(得分:1)
在FOR循环中将其排序-为什么这不起作用?
因为您的for
循环未将新定义的变量data
绑定到[train, test]
中的对象。您将在每个循环中重新定义data
,而无需更改train
或test
。
相反,您可以使用序列拆包:
train, test = (df.sort_values('time') for df in (train, test))
或者,在enumerate
循环中使用for
:
data = [train, test]
for idx, df in enumerate(data):
data[idx] = df.sort_values('time')
然后通过索引,即data[0]
,data[1]
来引用您的数据框。
或者,使用字典并迭代项目:
d = {'train': train, 'test': test}
for key, df in d.items():
d[key] = df.sort_values('time')
然后通过关键字data['train']
,data['test']
来引用您的数据框。
答案 1 :(得分:1)
有一个简单的方法,只需使用inplace = True参数进行排序
>>> train = pd.DataFrame({'id': [2, 3, 1], 'time':['2017-04-17 22:23:22', '2018-05-22 14:20:00', '2017-01-09 08:02:14']})
>>> test = pd.DataFrame({'id': [2, 3, 1], 'time':['2017-04-17 22:23:22', '2018-05-22 14:20:00', '2017-01-09 08:02:14']})
>>> for data in [train, test]:
data.sort_values('time', ascending=True, inplace=True)
>>> test
id time
2 1 2017-01-09 08:02:14
0 2 2017-04-17 22:23:22
1 3 2018-05-22 14:20:00
>>> train
id time
2 1 2017-01-09 08:02:14
0 2 2017-04-17 22:23:22
1 3 2018-05-22 14:20:00
如果您希望索引再次更新,只需添加reset_indext()
data.sort_values('time', ascending=True, inplace=True)
data.reset_index(inplace=True, drop=True)