次の3つのタイプのいずれかである場合に機能する変数を受け取る関数があります。
1. pandas Series
2. numpy array (ndarray)
3. python list
その他のタイプは拒否する必要があります。これを確認する最も効率的な方法は何ですか?
isinstance
を使用して実行できます:
_import pandas as pd
import numpy as np
def f(l):
if isinstance(l,(list,pd.core.series.Series,np.ndarray)):
print(5)
else:
raise Exception('wrong type')
_
次に、f([1,2,3])
は5を出力し、f(3.34)
はエラーを発生させます。
Python type()はここで仕事をする必要があります
l = [1,2]
s= pd.Series(l)
arr = np.array(l)
印刷するとき
type(l)
list
type(s)
pandas.core.series.Series
type(arr)
numpy.ndarray
これはすべてあなたが達成しようとしているものに依存します(タプルを許可しますか、range
オブジェクトはどうですか?)が、制限は少し少なくなりますが、文字列は許可しません(私はあなたがそれを推測しています)本当に達成しようとしています)次のコードを使用できます。
import collections
import pandas
import numpy
def myfunc(x):
if not isinstance(x, collections.abc.Iterable) or isinstance(x, (str, bytes)):
raise ValueError('A non-string iterable is required')
return 'Yay!'
myfunc([9, 7])
myfunc((9, 7))
myfunc(numpy.arange(9))
myfunc(range(9))
myfunc(pandas.Series([9, 7]))
myfunc('Boo') # THIS WILL RAISE A ValueError!!!!!
次のようにisinstanceを使用できます。
import pandas as pd
import numpy as np
#Simple List
simple_list = [1,2]
#numpy array
np_array = np.array(simple_list)
#Pandas series
pandas_series = pd.Series(simple_list)
if isinstance(simple_list, list):
print("This is a list: ", simple_list)
if isinstance(np_array, np.ndarray):
print("This is a numpy array: ", np_array)
if isinstance(pandas_series, pd.core.series.Series):
print("This is pandas series: ", pandas_series)