例如,我有这个pandas简单数据框:
>> print(file)
Name
0 ['junior','senior']
1 freshgrad
当我尝试使用时:
>> len(file[0])
2
但是对于第二个
>> len(file[1])
9
但我希望第二个计算为1
如何区分这两者?
.join()
,但仍然计算为9
list.count
但是我收到了错误答案 0 :(得分:1)
执行所需操作的最佳方法是检查相关项目的数据类型。您可以使用:
if isinstance(item, str):
...
和
isinstance(item, dtype)
如果是字符串,则可以根据需要使用1作为长度。请注意,使用type(item) == dtype
比使用Role = "Admin"
更好,因为它会自动处理子类型。
答案 1 :(得分:0)
您可以定义自己的长度函数,该函数使用该类型来确定如何计算长度:
def mylen(data):
return len(data) if isinstance(data,list) else 1
答案 2 :(得分:0)
freshgrad是一个字符串
所以len(文件[1])意味着你要计算这个字符串的长度。它是9
如果file [1]是包含[' freshgrad']等freshgrad的列表,则len(文件[1])将为1.
答案 3 :(得分:0)
Python Doc说关于函数len
返回对象的长度(项目数)。参数可以是序列(例如字符串,字节,元组,列表或范围)或集合(例如字典,集合或冻结集)。
请参阅https://docs.python.org/3/library/functions.html#len
换句话说
>>> len('freshgrad') 9 because returns the size of string
>>> len(['freshgrad']) 1 because returns the size of array
答案 4 :(得分:0)
您可以使用np.size
:
In [301]: file = pd.Series([['junior','senior'], 'freshgrad'])
In [302]: file.apply(np.size)
Out[302]:
0 2
1 1
dtype: int64
In [327]: np.size(file[0])
Out[327]: 2
In [328]: np.size(file[1])
Out[328]: 1
但在某种程度上,这可能只会拖延你的痛苦。当对象在
系列(或任何类型的序列)具有不同的类型,代码往往需要类型检查或try..except
以不同的方式处理各种类型。 (事实上,这就是np.size
正在做的事情。np.size
正在使用try..except
来处理异常情况。)
当序列中的所有对象具有相同类型时,生命通常更简单(因此更好)。因此,最好构建一个其元素都是列表的系列:
In [301]: file = pd.Series([['junior','senior'], ['freshgrad']])