Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t在迭代时修改数据帧_Python_Python 3.x_Pandas_List_For Loop - Fatal编程技术网

Python Can';t在迭代时修改数据帧

Python Can';t在迭代时修改数据帧,python,python-3.x,pandas,list,for-loop,Python,Python 3.x,Pandas,List,For Loop,我的问题是关于下面的FOR循环,我看到Kaggle上的著名数据科学家正在使用它。然而,它似乎不适合我 Python 3.66。 熊猫0.23.4 设置 排序(这个有效) 在FOR循环中进行排序-为什么这不起作用? 在FOR循环中进行排序-为什么这不起作用 因为您的for循环没有将新定义的变量数据绑定到[训练,测试]中的对象。您正在每个循环内重新定义数据,而不更改列车或测试 相反,您可以使用序列解包: train, test = (df.sort_values('time') for df in

我的问题是关于下面的FOR循环,我看到Kaggle上的著名数据科学家正在使用它。然而,它似乎不适合我

Python 3.66。 熊猫0.23.4

设置 排序(这个有效) 在FOR循环中进行排序-为什么这不起作用? 在FOR循环中进行排序-为什么这不起作用

因为您的
for
循环没有将新定义的变量
数据
绑定到
[训练,测试]
中的对象。您正在每个循环内重新定义
数据
,而不更改
列车
测试

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

train, test = (df.sort_values('time') for df in (train, test))
或者,在
for
循环中使用
枚举

data = [train, test]
for idx, df in enumerate(data):
    data[idx] = df.sort_values('time')
然后通过索引引用数据帧,即
数据[0]
数据[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_indext()


好吧,看来这只适用于系列,但不适用于数据帧。例如,这是有效的:
对于[train,test]中的数据:data['time']=5
jpp,我尝试了你提出的3种解决方案。实际上,只有第一种方法对序列中的数据进行排序。其他两种方法不行。@ihopethiswillfi,你必须了解如何使用第二种和第三种解决方案。在第一种情况下,将数据帧称为
data[0]/data[1]
,在第二种情况下,将数据帧称为
data['train']/data['test']
。哦,这是有道理的。谢谢你知道为什么更新这个系列是有效的,但是更新数据帧却不行吗?或者我也可以创建一个新问题。@ihopethiswillfi,对不起,不确定“更新系列”是什么意思。正确。不幸的是,inplace将被弃用。资料来源:熊猫主要开发者之一的最新视频。对不起,我忘了链接和他的名字。
data = [train, test]
for idx, df in enumerate(data):
    data[idx] = df.sort_values('time')
d = {'train': train, 'test': test}

for key, df in d.items():
    d[key] = df.sort_values('time')
>>> 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
data.sort_values('time', ascending=True, inplace=True)
data.reset_index(inplace=True, drop=True)