我正在尝试编写一个适用于所提供参数的每个元素的函数,无论参数是嵌套的python列表,numpy数组还是pandas数据帧或系列。
示例:(不工作)
import numpy as np
import pandas as pd
a = [[1,2,3,4,5], [6,7,8,9,10]]
b = np.array(a)
c = pd.DataFrame(a)
def printElement(x):
print x
def iterateOverElements(arg):
for element in arg:
printElement(element)
iterateOverElements(a)
iterateOverElements(b)
iterateOverElements(c)
所需输出:为三个呼叫中的每一个打印新线路中的1,2,3,4,5,6,7,8,9,10。 (顺序并不重要。)
真实输出:
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[1 2 3 4 5]
[ 6 7 8 9 10]
0
1
2
3
4
正如所料,嵌套列表遍历其子列表,其行上的numpy数组和列标签上的pandas数据帧。
是否有一种简洁的方法来实现我的目标,或者我是否需要检查参数的实例并为不同类型构建不同的迭代代码?如果我需要进行类型检查,是否存在一种进口方式,例如pandas只是为了进行类型检查并发现它毕竟是一个嵌套列表?
同样,我不关心迭代元素的顺序,只是它真的是"基本"元素而不是某些子集合。
答案 0 :(得分:0)
我会建议这样的事情:
def printElements(arg):
x = arg.iterrows() if isinstance(arg, pd.DataFrame) else arg
try:
for element in x:
printElements(element)
except:
print x
答案 1 :(得分:0)
将所有内容转换为NumPy数组并使用flat
迭代器:
def iterateOverElements(arg):
for element in np.asarray(arg).flat:
printElement(element)