我有一個快速的問題。我想匯入一個 .cvs 檔案,然后我想將它匯出回來。但是在某些單元格中,有更多的資訊被 \n 分隔。我設法將它分開,但是,我想知道有沒有更快的方法來做到這一點?在我處理完資料后,我想用 \n 將它匯出回來。我知道有點混亂,我舉個例子:
從這個 .csv 讀取
| 第一列 | 第 2 列 | 第 3 列 |
|---|---|---|
| asd\nfgd | 11\n22 | 系統1 |
| 馬達\nchaca\nhera | 32\n120\n35 | 系統2 |
| 好極了 | 344 | 系統3 |
對此
| 第一列 | 第 2 列 | 第 3 列 |
|---|---|---|
| 阿斯達 | 11 | 系統1 |
| fgd | 22 | 系統1 |
| 馬達 | 32 | 系統2 |
| 恰卡 | 120 | 系統2 |
| 赫拉 | 35 | 系統2 |
| 好極了 | 344 | 系統3 |
反之亦然。
這是我的代碼(我只有一種方法):
import pandas as pd
tabel=pd.read_csv('Test1.csv')
print(tabel)
Column1=[]
Column2=[]
Column3=[]
for i in range(0,len(tabel.index)):
sys_n=[tabel.iloc[i, 2]]
if "\n" in tabel.iloc[i,0] and "\n" in tabel.iloc[i,1]:
Column1.append(tabel.iloc[i, 0].splitlines())
Column2.append(tabel.iloc[i, 1].splitlines())
nr_sys=len(tabel.iloc[i, 0].splitlines())
Column3.extend([sys_n]*nr_sys)
else:
Column1.append(tabel.iloc[i, 0].splitlines())
Column2.append(tabel.iloc[i, 1].splitlines())
Column3.extend([sys_n])
print(Column1)
result=sum(Column1,[])
result1=sum(Column2,[])
result3=sum(Column3,[])
tabel2=pd.DataFrame(list(zip(result,result1,result3)), columns=[['Column1','Column2','Column3']])
print(tabel2)
tabel2.to_csv('Test1_1.csv',index=False)
注意:如果 Column1 有 2 行,則 Column2 也會有。
uj5u.com熱心網友回復:
給定的 tabel
Column1 Column2 Column3
0 asd\nfgd 11\n22 Sys1
1 mada\nchaca\nhera 32\n120\n35 Sys2
2 yay 344 Sys3
你可以
tabel2 = pd.DataFrame(
{"Column1": c_1, "Column2": c_2, "Column3": c_3}
for col_1, col_2, c_3 in tabel.itertuples(index=False)
for c_1, c_2 in zip(col_1.split("\n"), col_2.split("\n"))
)
或者
tabel2 = pd.DataFrame(
(
[c_1, c_2, c_3]
for col_1, col_2, c_3 in tabel.itertuples(index=False)
for c_1, c_2 in zip(col_1.split("\n"), col_2.split("\n"))
),
columns=tabel.columns
)
結果:
Column1 Column2 Column3
0 asd 11 Sys1
1 fgd 22 Sys1
2 mada 32 Sys2
3 chaca 120 Sys2
4 hera 35 Sys2
5 yay 344 Sys3
鑒于tabel2你可以做
col_1, col_2, col_3 = tabel2.columns
tabel = tabel2.groupby(col_3, as_index=False).agg(
{col_1: "\n".join, col_2: "\n".join, col_3: "first"}
)
結果:
Column1 Column2 Column3
0 asd\nfgd 11\n22 Sys1
1 mada\nchaca\nhera 32\n120\n35 Sys2
2 yay 344 Sys3
uj5u.com熱心網友回復:
假設每行的每個單元格都具有相同數量的'\n'字符,您可以使用 將每個單元格拆分'\n'為一個串列Series.str.split。然后,使用 將每個串列分解為不同的行Series.explode。您可以使用 將該邏輯應用于每一列Series.apply。
擴大
>>> df
Column1 Column2 Column3
0 asd\nfgd 11\n22 Sys1
1 mada\nchaca\nhera 32\n120\n35 Sys2
2 yay 344 Sys3
>>> long = df.apply(lambda col: col.str.split(r'\\n').explode())
>>> long
Column1 Column2 Column3
0 asd 11 Sys1
0 fgd 22 Sys1
1 mada 32 Sys2
1 chaca 120 Sys2
1 hera 35 Sys2
2 yay 344 Sys3
壓縮
要反轉該程序,您可以按索引 ( level=0)對行進行分組,并使用連接字串組str.join
>>> short = long.groupby(level=0).agg(r'\n'.join)
>>> short
Column1 Column2 Column3
0 asd\nfgd 11\n22 Sys1\nSys1
1 mada\nchaca\nhera 32\n120\n35 Sys2\nSys2\nSys2
2 yay 344 Sys3
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357490.html
上一篇:熊貓:下降后價值仍然存在
