下午好!
我有一個來自excel檔案的資料集,看起來如下:
我有一個來自excel檔案的資料集,看起來如下:
0 1 2 3 ...
1 NaN NaN V001 V002
2 NaN NaN 總計 總計
3 NaN NaN EUR EUR
4 NaN NaN Text Text
5 NaN NaN Text Text
6 NaN NaN Text
7 NaN NaN Text
8 NaN NaN Text
9 NaN NaN Text
10 NaN NaN Text
11 U1 Totalprod Text Text
12 U2 7000 5000 3000
...
我需要從A列洗掉NaN,然后將其轉置到一行并粘貼到第8行,然后表格將向下移動一行。它看起來應該是這樣的結果:
0 1 2 3 ...
1 NaN V001 V002 V003
2 NaN Total Total Total
3 NaN EUR EUR
4 NaN NaN Text Text
5 NaN NaN Text Text
6 NaN NaN Text
7 NaN NaN Text
8 NaN U1 U2 U3
9 NaN NaN Text Text
10 NaN NaN Text Text
11 NaN NaN Text
12 Totalprod 7000 5000 3000
13 3232 3223 999 3000
...
誰能幫助我使用python和pandas庫來實作這個目標?
uj5u.com熱心網友回復:
- 系統化地編碼,并將其作為一項重要內容。
- 系統地對你所描述和展示的內容進行編碼 。
- 獲得你想要的值,作為第8行 。
- 洗掉和重命名左邊的列 。
- 將三個部分合并在一起 。
import io
df = pd.read_csv(
io.StringIO("" A B C D
1 NaN NaN V001 V002
2 NaN NaN 總計 總計
3 NaN NaN EUR EUR
4 NaN NaN 文本 文本
5 NaN NaN 文本 文本
6 NaN NaN 文本 文本
7 NaN NaN 文本
8 NaN NaN 文本
9 NaN NaN 文本
10 NaN NaN 文本
11 U1 Totalprod Text Text
12 U2 7000 5000 3000""),sep="s ",)
# 獲取將成為行的值。
s_a = df["A"/span>].dropna()
# 丟棄不需要的列A,并重命名列A到Z。
df = df.drop(columns="A").pipe(
lambda d: d.rename(columns={c: df.columns[i] for i, c in enumerate(d.columns) })
)
# concat all parts together[/span
df = pd.concat(
[
df.loc[0:8] 。
pd.DataFrame(
np.array([s_a.values]),
columns=[
f"{''/span> if (c//26)==0 else chr((c//26) 64)}{chr((c%26) 65)}"/span>
for c in range(len(s_a)
],
),
df.loc[9:]。
]
).reset_index(drop=True)
df
| A | B | C | |||
|---|---|---|---|---|---|
| 0 | nan | ||||
| V001 | V001 | V001 | V002?
| 1 | 南 |
| 1 | 南 | 總計 | 總計|||
| 總計?
| 2 | 南 | EUR | EUR | 3 | 南 | 文本 | 文本 | 文本 |
| 文本
| 4 | 南 | 文本 | ||
| 文本 | 文本 | ||||
| 文本
| 5 | 南 | 文本 | 文本 | 文本 |
| 文本
| 6 | 南 | 文本 | ||
| 文本 | 文本 | ||||
| 文本
| 7 | 南 | 文本 | 文本 | 文本 |
| 文本
| 8 | U1 | U1 | U2 | U2 |
| 9 | 南 | 南? | 文本 | 文本 | 文本 |
| 文本
| 10 | 南 | 文本 | ||
| 文本 | 文本 | ||||
| 文本
| 11 | Totalprod | 文本 | 文本 | 文本 |
| 文本 | 12 | 7000 | |||
| 12 | 50005000 | 3000 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332432.html
標籤:
