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 のわずかな誤解です。:)

反復で使用される変数を再割り当てし、リストで変更していません。

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これは、Python がループを反復するときに、一度に 1 つずつ内のオブジェクト指します。groups

割り当て

dataset = dataset[:n]

変数名をリダイレクトdatasetして、新しいオブジェクトdataset[:n]. しかし、この割り当ては には影響しませんgroupslistその変数名は、元の DataFrame を含むオブジェクトをまだ指しています。

に影響を与えるには、次のような割り当てステートメントとして with にgroups新しい値を割り当てる必要があります。groups

groups = ...

または、リスト内の要素の 1 つに新しい値を割り当てます。

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

コードはdatasetfor ループで新しい変数を作成 (および破棄) します。

これを試して:

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