我有一个以非正统方式构建的 xlsx 文件。简化后,它看起来像这样:
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | ||||||
2 | 会员ID | 101 | 102 | 102 | 103 | |
3 | 名字 | 保罗 | 约翰 | 乔治 | 林戈 | |
4 | 姓氏 | 麦卡特尼 | 列侬 | 哈里森 | 斯塔尔 |
请注意,member_id 不是唯一的(这在原始数据中有意义)。
我的目标是拥有一张如下所示的表格:
会员ID | 名字 | 姓氏 |
---|---|---|
101 | 保罗 | 麦卡特尼 |
102 | 约翰 | 列侬 |
102 | 乔治 | 哈里森 |
103 | 林戈 | 斯塔尔 |
(注意member_id仍然不是唯一的)
所以我的方法是将这个表读入Python,转置它,然后将其写入数据库。
这是我到目前为止所拥有的:
import pandas as pd
import openpyxl
df = pd.read_excel('ingest_pzt/sample_inv.xlsx', sheet_name='data', engine='openpyxl', skiprows=[0])
这已经是一个糟糕的开始,因为 Pandas 似乎希望我的列是唯一的(请注意,这些列被称为“102”和“102.1”):
Unnamed: 0 member_id 101 102 102.1 104
0 NaN first_name paul john george ringo
1 NaN last_name mccartney lennon harrison starr
如果我解决了member_id 的问题,我会删除空列:
df = df.drop(df.columns[[0]], axis='columns')
这会给我
member_id 101 102 102.1 104
0 first_name paul john george ringo
1 last_name mccartney lennon harrison starr
然后我会像这样转置表格:
df = df.transpose()
0 1
member_id first_name last_name
101 paul mccartney
102 john lennon
102.1 george harrison
104 ringo starr
其中有一个奇怪的第一行曾经是索引,我似乎无法删除它。
非常感谢您的帮助!
创建一个新的 df2 并从第 2 行开始读取