web-dev-qa-db-ja.com

変数がpythonリスト、numpy配列またはpandasシリーズであるかどうかを確認する方法

次の3つのタイプのいずれかである場合に機能する変数を受け取る関数があります。

 1. pandas Series
 2. numpy array (ndarray)
 3. python list

その他のタイプは拒否する必要があります。これを確認する最も効率的な方法は何ですか?

12
Zhang18

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)はエラーを発生させます。

10
Miriam Farber

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
9
Vaishali

これはすべてあなたが達成しようとしているものに依存します(タプルを許可しますか、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!!!!!
3
SethMMorton

次のように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)
0
shreesh katti