如何通过 Python 上的循环将笛卡尔积保存到数据框?
How can I save cartesian products to a dataframe via loop on Python?
我有以下词典:
the_dictionary_list = {'Fondo': ['Oceano.png'],
'Cuerpo': ['Cuerpo_cangrejo.png'],
'Ojos': ['Antenas.png', 'Pico.png', 'Verticales.png'],
'Color': ['Amarillo.png', 'Blanco.png', 'Rojirosado.png', 'Turquesa.png', 'Verde_oscuro.png', 'Zapote.png'],
'Pinzas': ['None', 'Pinzitas.png', 'Pinzotas.png', 'Pinzota_pinzita.png'],
'Puas': ['None', 'Arena.png', 'Marron.png', 'Purpura.png', 'Verde.png']}
为了获得每个可能的排列而不按特定顺序重复(即笛卡尔积),我使用以下代码:
import itertools as it
AllKeysNames = ['Fondo', 'Cuerpo', 'Ojos', 'Color', 'Pinzas', 'Puas']
Combinations = list(it.product(*(the_dictionary_list[Name] for Name in AllKeysNames)))
print(f'{Combinations}')
我怎样才能让上面的程序将每次迭代都保存到数据帧中,例如它会抛出这样的输出:
Index | Permutations | FilePermutations
0 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+None
1 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Arena.png
2 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Marron.png
.
.
.
Permutations
列中的信息将保持不变,数据帧最终的索引长度为 359
IIUC,一种使用 pandas.Series.str.cat
的方法:
df = pd.DataFrame(list(product(*the_dictionary_list.values())))
df = df.loc[:, 0].str.cat(df.loc[:, 1:], sep="+").to_frame(name="FilePermutations")
df["Permutations"] = "+".join(the_dictionary_list)
print(df)
输出:
FilePermutations \
0 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
1 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
2 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
3 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
4 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
.. ...
355 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
356 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
357 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
358 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
359 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
Permutations
0 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
1 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
2 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
.. ...
355 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
356 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
357 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
358 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
359 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
[360 rows x 2 columns]
为 it.product
添加 join
,然后加入 Permutations
列:
AllKeysNames = ['Fondo', 'Cuerpo', 'Ojos', 'Color', 'Pinzas', 'Puas']
new = ['+'.join(x) for x in
it.product(*(the_dictionary_list[Name] for Name in AllKeysNames))]
df = pd.DataFrame({'Permutations':"+".join(AllKeysNames), 'FilePermutations':new})
print (df)
Permutations \
0 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
1 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
2 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
.. ...
355 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
356 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
357 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
358 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
359 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
FilePermutations
0 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
1 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
2 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
3 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
4 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
.. ...
355 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
356 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
357 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
358 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
359 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
[360 rows x 2 columns]
我有以下词典:
the_dictionary_list = {'Fondo': ['Oceano.png'],
'Cuerpo': ['Cuerpo_cangrejo.png'],
'Ojos': ['Antenas.png', 'Pico.png', 'Verticales.png'],
'Color': ['Amarillo.png', 'Blanco.png', 'Rojirosado.png', 'Turquesa.png', 'Verde_oscuro.png', 'Zapote.png'],
'Pinzas': ['None', 'Pinzitas.png', 'Pinzotas.png', 'Pinzota_pinzita.png'],
'Puas': ['None', 'Arena.png', 'Marron.png', 'Purpura.png', 'Verde.png']}
为了获得每个可能的排列而不按特定顺序重复(即笛卡尔积),我使用以下代码:
import itertools as it
AllKeysNames = ['Fondo', 'Cuerpo', 'Ojos', 'Color', 'Pinzas', 'Puas']
Combinations = list(it.product(*(the_dictionary_list[Name] for Name in AllKeysNames)))
print(f'{Combinations}')
我怎样才能让上面的程序将每次迭代都保存到数据帧中,例如它会抛出这样的输出:
Index | Permutations | FilePermutations
0 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+None
1 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Arena.png
2 |Fondo+Cuerpo+Ojos+Color+Pinzas+Puas|Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Marron.png
.
.
.
Permutations
列中的信息将保持不变,数据帧最终的索引长度为 359
IIUC,一种使用 pandas.Series.str.cat
的方法:
df = pd.DataFrame(list(product(*the_dictionary_list.values())))
df = df.loc[:, 0].str.cat(df.loc[:, 1:], sep="+").to_frame(name="FilePermutations")
df["Permutations"] = "+".join(the_dictionary_list)
print(df)
输出:
FilePermutations \
0 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
1 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
2 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
3 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
4 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
.. ...
355 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
356 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
357 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
358 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
359 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
Permutations
0 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
1 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
2 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
.. ...
355 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
356 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
357 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
358 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
359 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
[360 rows x 2 columns]
为 it.product
添加 join
,然后加入 Permutations
列:
AllKeysNames = ['Fondo', 'Cuerpo', 'Ojos', 'Color', 'Pinzas', 'Puas']
new = ['+'.join(x) for x in
it.product(*(the_dictionary_list[Name] for Name in AllKeysNames))]
df = pd.DataFrame({'Permutations':"+".join(AllKeysNames), 'FilePermutations':new})
print (df)
Permutations \
0 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
1 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
2 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
.. ...
355 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
356 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
357 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
358 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
359 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas
FilePermutations
0 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
1 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
2 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
3 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
4 Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Ama...
.. ...
355 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
356 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
357 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
358 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
359 Oceano.png+Cuerpo_cangrejo.png+Verticales.png+...
[360 rows x 2 columns]