web-dev-qa-db-fra.com

Comment vérifier si une variable est une liste python, tableau numpy ou pandas series

J'ai une fonction qui prend une variable qui fonctionnerait si c'est l'un des trois types suivants

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

Tout autre type doit être rejeté. Quelle est la manière la plus efficace de vérifier cela?

12
Zhang18

Vous pouvez le faire en utilisant 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]) imprime 5 tandis que f(3.34) déclenche une erreur.

10
Miriam Farber

Le type Python () devrait faire le travail ici

l = [1,2]
s= pd.Series(l)
arr = np.array(l) 

Lorsque vous imprimez

type(l)
list

type(s)
pandas.core.series.Series

type(arr)
numpy.ndarray
9
Vaishali

Tout cela dépend vraiment de ce que vous essayez de réaliser (allez-vous autoriser un tuple, que diriez-vous d'un objet range?), Mais être un peu moins restrictif mais toujours interdire les chaînes (ce qui, je suppose, est ce que vous tentent vraiment d'atteindre), vous pouvez utiliser le code suivant.

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

Vous pouvez utiliser une instance comme celle-ci:

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