繁体   English   中英

PANDAS:修剪多个数据帧

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM