python - 转置 Excel 表格的第一列,删除空单元格并将其附加到特定行
问题描述
我有一个来自 Excel 文件的数据集,如下所示:
0 1 2 3 ...
1 NaN NaN V001 V002
2 NaN NaN Total Total
3 NaN NaN EUR EUR
4 NaN NaN Text Text
5 NaN NaN Text Text
6 NaN NaN Text Text
7 NaN NaN Text Text
8 NaN NaN Text Text
9 NaN NaN Text Text
10 NaN NaN Text 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 EUR
4 NaN NaN Text Text
5 NaN NaN Text Text
6 NaN NaN Text Text
7 NaN NaN Text Text
8 NaN U1 U2 U3
9 NaN NaN Text Text
10 NaN NaN Text Text
11 NaN NaN Text Text
12 Totalprod 7000 5000 3000
13 3232 3223 999 3000
...
如何使用 Python 和 Pandas 库实现这一点?
解决方案
- 系统地编码你描述和展示的内容
- 获取您想要的值作为第 8 行
- 删除并重命名左侧的列
- 将三个部分连接在一起
import io
df = pd.read_csv(
io.StringIO(""" A B C D
1 NaN NaN V001 V002
2 NaN NaN Total Total
3 NaN NaN EUR EUR
4 NaN NaN Text Text
5 NaN NaN Text Text
6 NaN NaN Text Text
7 NaN NaN Text Text
8 NaN NaN Text Text
9 NaN NaN Text Text
10 NaN NaN Text Text
11 U1 Totalprod Text Text
12 U2 7000 5000 3000"""),sep="\s+",)
# get values that will become row
s_a = df["A"].dropna()
# drop unwanted column A and rename columns A to 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
df = pd.concat(
[
df.loc[0:8],
pd.DataFrame(
np.array([s_a.values]),
columns=[
f"{'' if (c//26)==0 else chr((c//26)+64)}{chr((c%26)+65)}"
for c in range(len(s_a))
],
),
df.loc[9:],
]
).reset_index(drop=True)
df
一种 | 乙 | C | |
---|---|---|---|
0 | 楠 | V001 | V002 |
1 | 楠 | 全部的 | 全部的 |
2 | 楠 | 欧元 | 欧元 |
3 | 楠 | 文本 | 文本 |
4 | 楠 | 文本 | 文本 |
5 | 楠 | 文本 | 文本 |
6 | 楠 | 文本 | 文本 |
7 | 楠 | 文本 | 文本 |
8 | U1 | U2 | 楠 |
9 | 楠 | 文本 | 文本 |
10 | 楠 | 文本 | 文本 |
11 | 全产品 | 文本 | 文本 |
12 | 7000 | 5000 | 3000 |
推荐阅读
- json - 如何从包含 json 数组的流中一次读取一个 json 对象而不将整个数组加载到内存中?
- android - 在android中制作高效的重复动画
- gradle - 如何在调试时将 gradle 属性放入 intellij?
- selenium-webdriver - 在 Mac 上最大化浏览器窗口?
- java - 泽西 Java 反射
- javascript - 动态更改地图元素的样式
- java - 如何像输入int一样使用字符串?
- r - 使用 dplyr 收集数据并绑定收集到的数据的行
- javascript - 使用 Selenium + istanbul 的 javascript 代码覆盖率
- javascript - 从javascript中的字符串中提取带有'='的变量的最佳方法是什么