[英]PANDAS: Trim multiple data frames
我想从几个数据框中删除行,使它们都是n长度。 当我尝试使用-for-loop时,更改将不会在脚本的其余部分中持续存在。
n = 50
groups = [df1, df2, df3]
for dataset in groups:
dataset = dataset[:n]
单独重新定义名称(例如,df1 = df1 [:n])是有效的,但有哪些替代方法? (通过python或pandas)
更重要的是,为什么循环不能在这里工作?
pandas == 0.10.1 python == 2.7.3
这是一个轻微的蟒蛇误解,而不是与熊猫特定的一个。 :)
您将重新分配迭代中使用的变量,而不是在列表中更改它:
In [1]: L = [1, 2, 3]
In [2]: for i in L:
i = i + 1
In [3]: L
Out[3]: [1, 2, 3]
您想要实际更改列表:
In [4]: for i in range(len(L)):
L[i] = L[i] + 1
In [5]: L
Out[5]: [2, 3, 4]
或者使用更好的语法是使用enumerate
:
In [6]: for i, x in enumerate(L):
L[i] = x + 1
In [7]: L
Out[7]: [3, 4, 5]
那是:
for i, dataset in enumerate(groups):
groups[i] = dataset[:n]
n = 50
groups = [df1, df2, df3]
groups = [df.head(n) for df in groups]
在Python中,您可以将变量名称视为指向对象。 该声明
groups = [df1, df2, df3]
使变量名称, groups
,指向列表对象,其中包含3个其他对象。
for-loop
:
for dataset in groups:
创建一个新的变量名称dataset
,它也指向groups
内的对象,Python迭代循环时一次一个。
分配
dataset = dataset[:n]
重定向变量名称dataset
以指向新对象dataset[:n]
。 但这项任务不会影响groups
。 该变量名仍指向list
对象,该对象包含原始DataFrame。
要影响groups
,您需要为具有赋值语句的groups
分配新值,例如
groups = ...
或为列表中的一个元素分配新值:
groups[i] = ...
您的代码在for循环中创建(并丢弃)新的变量dataset
。
尝试这个:
n = 50
groups = [df1, df2, df3]
for dataset in groups:
dataset[:] = dataset[:n]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.