join
Метод join
построен именно для этих типов ситуаций. Вы можете присоединиться к любому числу DataFrames вместе с ним. Вызывающий DataFrame соединяется с индексом коллекции переданных DataFrames. Чтобы работать с несколькими DataFrames, вы должны поместить столбцы соединения в индекс.
Код будет выглядеть примерно так:
filenames = ['fn1', 'fn2', 'fn3', 'fn4',....]
dfs = [pd.read_csv(filename, index_col=index_col) for filename in filenames)]
dfs[0].join(dfs[1:])
С данными @ zero вы можете сделать это :
df1 = pd.DataFrame(np.array([
['a', 5, 9],
['b', 4, 61],
['c', 24, 9]]),
columns=['name', 'attr11', 'attr12'])
df2 = pd.DataFrame(np.array([
['a', 5, 19],
['b', 14, 16],
['c', 4, 9]]),
columns=['name', 'attr21', 'attr22'])
df3 = pd.DataFrame(np.array([
['a', 15, 49],
['b', 4, 36],
['c', 14, 9]]),
columns=['name', 'attr31', 'attr32'])
dfs = [df1, df2, df3]
dfs = [df.set_index('name') for df in dfs]
dfs[0].join(dfs[1:])
attr11 attr12 attr21 attr22 attr31 attr32
name
a 5 9 5 19 15 49
b 4 61 14 16 4 36
c 24 9 4 9 14 9
Разница между hiera_array()
и обычным hiera()
связана с тем, что происходит, когда запрашиваемый ключ (network::interfaces
в вашем случае) присутствует на нескольких уровнях иерархии. Это очень мало связано с тем, в какой форме вы хотите получить данные, и не имеет ничего общего с выбором битов и кусков структур данных. hiera_array()
запрашивает поиск «слияние массивов». Более современная lookup()
функция именует это как «уникальную» стратегию слияния.
Кажется маловероятным, что поиск слияния массивов на самом деле то, что вы хотите. В этом случае проще всего прочитать весь хеш и извлечь ключи:
$network_interfaces = keys(hiera('network::interfaces'))
В Puppet 4 вам нужно будет использовать функцию keys()
, предоставляемую модулем puppetlabs / stdlib. Начиная с Puppet 5 эта функция появляется в ядре Puppet.