Я пытаюсь написать функцию, которая применяется к каждому элементу предоставленного аргумента, является ли аргумент вложенным списком python, массивом numpy или pandas dataframe или серии.Универсальная итерация по всем элементам: вложенному списку, массиву numpy, pandas dataframe
Пример: (не работает)
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 в новых линиях для каждого из трех вызовов. (Приказ не имеет значения.)
True Выход:
[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 массив над рядами и панды dataframe над его заголовков столбцов.
Есть ли краткий путь к достижению моей цели, или мне нужно проверить экземпляр аргумента и построить разные коды итераций для разных типов? Если мне нужно проверить тип, есть ли способ импорта, например. pandas просто проверить тип и узнать, что он был вложенным списком в конце концов?
Опять же, меня не волнует порядок, в котором я повторяю элементы, просто, что это действительно «основные» элементы, а не какая-то подсекция.
Различные типы имеют действительно различные идеи/проекты, как перебрать их элементы , Возможно, это несчастливо, но так оно и есть. Таким образом, вы можете проверить тип экземпляра или, предпочтительно, преобразовать значение в соответствующий тип, прежде чем передавать его в свою функцию (что-то вроде 'iterateOverElements (b.tolist())' или 'iterateOverElements (c.values.tolist()) '). – Evert