1

我想从几个数据帧中删除行,使它们的长度都为 n。当我尝试使用 -for- 循环时,更改不会持续到脚本的其余部分。

n = 50
groups = [df1, df2, df3]
for dataset in groups:
    dataset = dataset[:n]

单独重新定义名称(例如, df1 = df1[:n] )是可行的,但还有哪些替代方法?(通过python或pandas)

更重要的是,为什么 -for- 循环在这里不起作用?

熊猫 == 0.10.1 蟒蛇 == 2.7.3

4

3 回答 3

2

这是对 python 的轻微误解,而不是与 pandas 特定的误解有关。:)

您正在重新分配迭代中使用的变量,而不是在列表中更改它:

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]
于 2013-03-30T00:26:52.593 回答
1
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,您需要为groupswith as 赋值语句分配一个新值,例如

groups = ...

或为列表中的一个元素分配一个新值:

groups[i] = ...
于 2013-03-30T01:06:53.850 回答
0

dataset您的代码在 for 循环中创建(并丢弃)一个新变量。

试试这个:

n = 50
groups = [df1, df2, df3]
for dataset in groups:
    dataset[:] = dataset[:n]
于 2013-03-30T00:38:06.160 回答