前提・実現したいこと
メソッド名と引数を"."に続けて書けるような、defによる関数の定義方法がわからず、困っております。
(普段、Rを利用している、Python初心者です。初歩的な質問になりますが、検索による調べ方(ワード)もわからない状況・知識のため、方法や調べ方をご教示いただけますと幸いです。)
発生している問題・エラーメッセージ
defにて関数を作成し、とあるオブジェクトに対してメソッド名(defによる関数)と引数を"."に続けて書くと、エラーが出力されます。
AttributeError: 'Series' object has no attribute 'f_isnull'
該当のソースコード
以下、具体例として、[nan]が文字列として入力されている場合でも、isnull関数にて[nan]として認識させる関数を作成する例を、記載させていただきます。
Python
1import pandas 2 3# ============================================================================= 4# [nan]が文字列として入力されていると、isnull()関数でFalseが出力される 5# ============================================================================= 6vec01 = pandas.Series([numpy.nan, "nan", "test"]) 7 8pandas.isnull(vec01) 9vec01.isnull() 10# 両方とも、エラーは出ない 11# Outputは、両方とも [True, False, False] 12# しかし、文字列のnan、2つ目のFalseを、Trueとして出力できる関数がほしい 13 14# ============================================================================= 15# 文字列の[nan]でも、Trueを出力する関数を作成する 16# ============================================================================= 17def f_isnull(f_vec): 18 f_vec_01 = f_vec.isnull() 19 f_vec_02 = (f_vec.str.lower() == "nan") 20 return(f_vec_01 | f_vec_02) 21 22# ============================================================================= 23# 上記で作成した関数を、適用してみる 24# ============================================================================= 25f_isnull(vec01) 26vec01.f_isnull() 27# 前者は [True, True, False]という、目的とした値が得られる。 28# 後者は['Series' object has no attribute 'f_isnull']というエラーが出力される 29
試したこと
上記の「vec01.f_isnull()」という書き方で正しく実行されるよう、defによる関数の定義方法を変更したいと考えております。
変更方法について、ご教示いただけますと幸いです。
※追記
皆様、ご回答ありがとうございました!
クラス・メソッドについて、色々とみてみましたが、しっかりとした知識・理解がないと、今回の問題を解決できないであろうことが見えてきました。
もともとは、Rのパイプ処理(%>%)のように、毎回、同じオブジェクトや引数を指定しないことが目的でした。
そのため、「普通に関数を利用する」ことをベースに、「Pandas部分については、pipe関数で対応」したいと思います。
すべてのご回答が、とても参考になりました。皆様、誠にありがとうございました!
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。