迭代时无法修改Pandas DataFrame

2024-06-17 13:17:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是关于下面的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

分类(这行得通)

^{pr2}$

在FOR循环中进行排序-为什么这不起作用?在

^{3}$

Tags: 数据testiddataframefortime排序分类
2条回答

Sort it in a FOR loop - why does this not work?

因为您的for循环没有将新定义的变量data绑定到[train, test]内的对象。您正在每个循环中重新定义data,而不更改train或{}。在

相反,您可以使用序列解包:

train, test = (df.sort_values('time') for df in (train, test))

或者,在for循环中使用enumerate

^{pr2}$

然后通过索引引用数据帧,即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']。在

有一种简单的方法,只需使用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\u indext()

^{pr2}$

相关问题 更多 >