如何用Pandas将表格数据转为列格式以导入数据库?支持Excel方法
嘿,我来帮你搞定这个格式转换的问题!不管用Python Pandas还是Excel都能轻松实现,下面分别给你详细步骤:
用Python Pandas实现
首先先明确需求:把类似这样的宽表结构(每列对应一个日期,行是维度项):
| 名称 | 2023-01 | 2023-02 | 2023-03 |
|---|---|---|---|
| A | 100 | 150 | 200 |
| B | 80 | 90 | 120 |
转换成适合数据库导入的长表格式(每行对应一个维度+日期+数值的组合):
| 名称 | 日期 | 数值 |
|---|---|---|
| A | 2023-01 | 100 |
| A | 2023-02 | 150 |
| A | 2023-03 | 200 |
| B | 2023-01 | 80 |
| B | 2023-02 | 90 |
| B | 2023-03 | 120 |
具体代码操作步骤:
- 导入Pandas并读取原始数据(这里假设你用Excel存储数据):
import pandas as pd # 读取Excel文件,确保表头是第一行 df = pd.read_excel("你的原始数据文件名.xlsx")
- 使用
melt函数完成宽表转长表:
# id_vars:指定不需要被转换的维度列(比如示例里的"名称",按你的实际列名修改) # var_name:转换后日期列的名称 # value_name:转换后数值列的名称 transformed_df = df.melt( id_vars=["名称"], var_name="日期", value_name="数值" )
如果还有其他不需要转换的维度列,直接加到id_vars的列表里就行,比如id_vars=["名称", "类别"]。
- 导出为适合数据库导入的格式(比如CSV):
# index=False是去掉默认的行索引,避免导入数据库时多出无用列 transformed_df.to_csv("转换后的数据.csv", index=False, encoding="utf-8")
用Excel实现
如果你更习惯用Excel操作,可以借助Power Query快速完成,步骤如下:
- 选中你的原始数据区域,点击顶部「数据」选项卡 → 「从表格/区域」(弹出对话框时,确认勾选“我的表格有标题”)。
- 进入Power Query编辑器后,选中所有需要转换的日期列(比如2023-01、2023-02这类列)。
- 点击顶部「转换」选项卡 → 「逆透视列」→ 选择「逆透视列」(如果有不需要转换的维度列,选「逆透视其他列」更高效)。
- 此时你会看到自动生成的「属性」和「值」列,右键点击列名重命名为「日期」和「数值」。
- 点击顶部「关闭并上载」,转换好的长表就会出现在新的工作表里,你可以直接复制或者另存为CSV用于数据库导入。
内容的提问来源于stack exchange,提问作者Chelseajcole




