47133


以下のコード（関数は省略はしておりますが）  
以下のエラーコードがでます。  
Traceback (most recent call last):  
df_L12[i] = df_clear()  
NameError: name 'df_L12' is not defined  
for文のあとにdfをclearしているので大丈夫かと思っていたのですがコードが通りません。  
ご教授のほどよろしくおねがいします。

[code]

    import os
    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import wx
    
    def df_clear():
        df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
        return df
    
    def ask_number():
        return 1
    
    Remediation = int(ask_number())
    
    for i in range(0, Remediation):
        df_L12[i] = df_clear()
        df_L14[i] = df_clear()
        df_nagate[i] = df_clear()
    
        if i > Remediation:
    
            target_dir0 = ask_dir()
            df_L12, df_L14, df_nagate = df_make(target_dir0, '.CSV',i)
            df_L12[i] = df_L12
            df_L14[i] = df_L14
            df_nagate[i] = df_nagate
    
[/code]


CC BY-SA 4.0
2018-07-31T10:00:21.573
47131
2018-07-31T11:04:51.983
29536
question
python pandas
データフレームをリスト化


エラーが起こっているのはこの行ですが、

[code]

    df_L12[i] = df_clear()
    
[/code]

この行ではおおよそ以下の 3 つのことが起こっています。

  * `df_L12` の `i` 番目を探す。
  * `df_clear()` を計算する。
  * `df_clear()` を `df_L12` の `i` 番目に代入する。

このうち「`df_L12` の `i` 番目を探す」を行おうとすると、変数 `df_L12`
がそもそも未定義なので失敗します。今回のエラーの原因はこれです。

これは何も pandas の DataFrame に限った話ではありません。たとえば Python
インタプリタを起動して最初に以下のプログラムを打ち込むと、同様のエラーが起きます。

[code]

    lst[0] = 123
    
[/code]

そこでまずは Python に「`df_L12` はリストだ」ということを教えてあげないといけません。つまり、for 文を回す前に `df_L12`
をリストとして初期化しておく必要があります。

質問者さんがこの for 文でどのようなことをなさりたいのかよく分からないので雰囲気で書きますが、おおよそ次のようなプログラムになるかと思います。

[code]

    df_L12 = [None] * Remediation
    for i in range(0, Remediation):
        df_L12[i] = pd.DataFrame(諸々の設定)  # 初期化
        # 更にここで何かしら計算をする
    
[/code]

もっと言うと、`df_L12` のリスト構造も DataFrame の 1 つの次元として扱うほうが自然かもしれません (何をなさりたいのかによります)。


CC BY-SA 4.0
2018-07-31T11:04:51.983
47133
2018-07-31T11:04:51.983
19110
47131
answer