質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

9736閲覧

AttributeError: 'module' object has no attribute 'getInitData'

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/03/14 05:19

AttributeError: 'module' object has no attribute 'getInitData' とエラーが出ました。
Data.pyに

class Data: def __init__(self, df): self.df = df self.df_extracted = df self.standard_d = 0 def cleaning(self, media): self.df = self.df.drop("AAA", axis=1) self.df_extracted = self.df def getInitData(self): return self.df

と書き

using.pyに

import Data import libraries as libraries import datamod df = libraries.pd.read_csv('data/aaa.csv',header=1, parse_dates=True) datas = Data.Data(df) li_uniq = [] for x in df['ZZZ']: if x not in li_uniq: li_uniq.append(x) array_x = libraries.np.zeros(len(calDf)) array_y = libraries.np.zeros(len(calDf)) for num in range(len(calDf)): array_x[num] = calDf.iloc[num, 0] array_y[num] = calDf.iloc[num, 1] datas.extraction('BBB', 'y') datas = Data.getInitData(self.df)

と書きました。
importしているのに、 'module' objectと出る理由がわかりません。

clean = Data() datas = clean.getInitData(df)

のようにしてもだめでした。
どう直せばいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Python

1import Data

これは Data.py をimportしているだけで、Data.pyに実装しているDataクラスそのものではありません。

なので、以下のコードは合っています

Python

1datas = Data.Data(df)

しかし、以下のコードは間違っています。

Python

1datas = Data.getInitData(self.df)

もし近い表現で書くとしたら以下のようになります

Python

1datas = Data.Data.getInitData(datas)

しかし、Python的には以下のように書いた方がよいです

Python

1new_df = datas.getInitData()

これをふまえると、using.py全体としては以下のようになります。

Python

1import Data 2import libraries as libraries 3import datamod 4 5df = libraries.pd.read_csv('data/aaa.csv',header=1, parse_dates=True) 6 7datas = Data.Data(df) 8 9li_uniq = [] 10for x in df['ZZZ']: 11 if x not in li_uniq: 12 li_uniq.append(x) 13 14 array_x = libraries.np.zeros(len(calDf)) 15 array_y = libraries.np.zeros(len(calDf)) 16 17for num in range(len(calDf)): 18 array_x[num] = calDf.iloc[num, 0] 19 array_y[num] = calDf.iloc[num, 1] 20 21 datas.extraction('BBB', 'y') 22 23new_df = datas.getInitData() # <- 修正箇所はこの1行です

以下、質問と多少はなれた部分についての余談です。

dfはpandasのデータフレームをもつ変数で、datasはDataモジュールのDataクラスを表していそうです。getInitDataが返す値 self.df は、Data.Dataの初期化時にわたしているdfそのものなので、名前の混乱を避けるためdatasへ代入するのではなくnew_df等の変数に代入するのがよいでしょう。

投稿2017/03/14 05:42

編集2017/03/14 06:36
shimizukawa

総合スコア1847

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimizukawa

2017/03/14 05:43

さらに余談ですが、dataは複数形で単数がdatumです。
退会済みユーザー

退会済みユーザー

2017/03/14 05:52

ありがとうございます。 df_new = datas.getInitData() datas = df_new と書いたのですが、 raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m)) TypeError: Improper input: N=2 must not exceed M=0 とエラーが出ました
退会済みユーザー

退会済みユーザー

2017/03/14 05:55

datas = Data.Data.getInitData(datas) と書いても同じエラーが出て df_new = datas.getInitData(df) と書いたら TypeError: getInitData() takes exactly 1 argument (2 given)  とエラーが出ました
退会済みユーザー

退会済みユーザー

2017/03/14 05:55

注目している箇所がおかしいのでしょうか?
terapyon

2017/03/14 06:19

df_new = datas.getInitData() とする必要があります。 classのインスタンスであるdatasのメソッドであるgetInitDataを呼び出す時に、インスタンスが第1引数に自動的に入る仕組みになっています。つまり、宣言時に def getInitData(self): とた、selfは呼び出し時には与える必要はありません。(与えてはいけません) エラーメッセージの 1 argument (2 given) は、1つの引数で宣言しているに、2つの引数が入っていておかしいよ! っていっていますね。
guest

0

getInitData()Dataクラスの引数なしのインスタンス(提示ソースではdatasの)メソッドなので、以下のように呼び出します。

Python

1= datas.getInitData()

投稿2017/03/14 05:27

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/14 05:32

clean = datas.getInitData() datas = clean のように書きますか? こう書いたのですがうまく行かず...
can110

2017/03/14 05:43

「どう」うまく行かないのかが分からないので回答できません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問