Zha*_*g18 16 python arrays numpy list pandas
我有一个函数,它接受一个变量,如果它是以下三种类型中的任何一种,它将起作用
1. pandas Series
2. numpy array (ndarray)
3. python list
Run Code Online (Sandbox Code Playgroud)
任何其他类型都应该被拒绝.检查这个的最有效方法是什么?
Mir*_*ber 14
你可以使用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')
Run Code Online (Sandbox Code Playgroud)
然后f([1,2,3])打印5,同时f(3.34)引发错误.
Vai*_*ali 11
Python type()应该在这里完成工作
l = [1,2]
s= pd.Series(l)
arr = np.array(l)
Run Code Online (Sandbox Code Playgroud)
当你打印
type(l)
list
type(s)
pandas.core.series.Series
type(arr)
numpy.ndarray
Run Code Online (Sandbox Code Playgroud)
Ric*_*ica 11
其他答案都很好,但我更喜欢这种方式:
if np.ndim(l)!=0:
# this is something like a series, list, ndarray, etc.
Run Code Online (Sandbox Code Playgroud)
它很好,因为与以下内容相比,它提供了更多的鸭子类型灵活性:
if isinstance(l, (pd.Series, list, np.ndarray)):
# this is ONLY a pd.Series, list, or ndarray
Run Code Online (Sandbox Code Playgroud)
...但它比这更好,它允许使用字符串或迭代器——这两者通常都是不需要的:
if isinstance(l, typing.Iterable):
# this any iterable
Run Code Online (Sandbox Code Playgroud)
...或者这个,它排除字符串,但(奇怪的是)不排除迭代器:
if not np.isscalar(l):
# this is something like a series, list, ndarray, etc.
Run Code Online (Sandbox Code Playgroud)
但是,如果您确实只想要list、ndarray、 或Series,则其他答案更好。