如何使用 for 循环将列及其内容从 df 转换为 Python 上更有组织的列? Pandas 相关
How can I use for loops to convert the columns and its contents from a df to a more organized ones on Python? Pandas related
我得到以下 df
作为先前过程的结果,该过程使一些 Cartesian Products:
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
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Purpura.png
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Verde.png
.
.
.
我想将那个 df
转换成这个,其中每个 "_"
变成 " "
并且单词末尾的每个 ".png"
都被删除了:
0 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | None
1 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Arena
2 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Marron
3 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Purpura
4 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Verde
.
.
.
我试过下面的代码:
import pandas as pd
old_df = pd.read_csv("cartesian.csv", index_col=0)
new_columns = old_df.iloc[0]['Permutations'].split("+")
new_data = []
for i in range(0, len(old_df)):
row_data = old_df.iloc[i]['FilePermutations'].split("+")
current_data = []
for j, column in enumerate(new_columns):
current_data.append(f"{column} {row_data[j]}")
new_data.append(current_data)
updated_df = pd.DataFrame(data=new_data, columns=new_columns)
print(updated_df)
但只得到了这个 new_df
:
Fondo Cuerpo ... Pinzas Puas
0 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas None
1 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Arena.png
2 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Marron.png
3 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Purpura.png
4 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Verde.png
.. ... ... ...
[360 rows x 6 columns]
我可以得到一些帮助吗?
使用Series.str.split
and df.replace
with pd.concat
:
In [415]: res = pd.concat([df.Permutations.str.split('+', expand=True), df.FilePermutations.str.split('+', expand=True)], 1).replace({'_': ' ', '.png': ''}, regex=True)
In [416]: res
Out[416]:
0 1 2 3 4 5 0 1 2 3 4 5
0 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None None
1 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Arena
2 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Marron
3 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Purpura
4 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Verde
根据@mozway 的评论,避免使用 apply
:
链接
In [451]: x = df.apply(lambda x: x.str.split('+'), 1)
In [452]: res = pd.concat([x[i].apply(pd.Series) for i in x], 1).replace({'_': ' ', '.png': ''}, regex=True)
In [453]: res
Out[453]:
0 1 2 3 4 5 0 1 2 3 4 5
0 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None None
1 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Arena
2 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Marron
3 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Purpura
4 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Verde
我得到以下 df
作为先前过程的结果,该过程使一些 Cartesian Products:
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
3 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Purpura.png
4 Fondo+Cuerpo+Ojos+Color+Pinzas+Puas Oceano.png+Cuerpo_cangrejo.png+Antenas.png+Amarillo.png+None+Verde.png
.
.
.
我想将那个 df
转换成这个,其中每个 "_"
变成 " "
并且单词末尾的每个 ".png"
都被删除了:
0 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | None
1 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Arena
2 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Marron
3 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Purpura
4 | Fondo | Oceano | Cuerpo | Cuerpo cangrejo | Ojos | Antenas | Color | Amarillo | Pinzas | None | Puas | Verde
.
.
.
我试过下面的代码:
import pandas as pd
old_df = pd.read_csv("cartesian.csv", index_col=0)
new_columns = old_df.iloc[0]['Permutations'].split("+")
new_data = []
for i in range(0, len(old_df)):
row_data = old_df.iloc[i]['FilePermutations'].split("+")
current_data = []
for j, column in enumerate(new_columns):
current_data.append(f"{column} {row_data[j]}")
new_data.append(current_data)
updated_df = pd.DataFrame(data=new_data, columns=new_columns)
print(updated_df)
但只得到了这个 new_df
:
Fondo Cuerpo ... Pinzas Puas
0 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas None
1 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Arena.png
2 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Marron.png
3 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Purpura.png
4 Fondo Oceano.png Cuerpo Cuerpo_cangrejo.png ... Pinzas None Puas Verde.png
.. ... ... ...
[360 rows x 6 columns]
我可以得到一些帮助吗?
使用Series.str.split
and df.replace
with pd.concat
:
In [415]: res = pd.concat([df.Permutations.str.split('+', expand=True), df.FilePermutations.str.split('+', expand=True)], 1).replace({'_': ' ', '.png': ''}, regex=True)
In [416]: res
Out[416]:
0 1 2 3 4 5 0 1 2 3 4 5
0 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None None
1 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Arena
2 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Marron
3 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Purpura
4 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Verde
根据@mozway 的评论,避免使用 apply
:
In [451]: x = df.apply(lambda x: x.str.split('+'), 1)
In [452]: res = pd.concat([x[i].apply(pd.Series) for i in x], 1).replace({'_': ' ', '.png': ''}, regex=True)
In [453]: res
Out[453]:
0 1 2 3 4 5 0 1 2 3 4 5
0 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None None
1 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Arena
2 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Marron
3 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Purpura
4 Fondo Cuerpo Ojos Color Pinzas Puas Oceano Cuerpo cangrejo Antenas Amarillo None Verde