首页 > 解决方案 > 使用 pandas 从 excel 文件生成 csv

问题描述

我一直在尝试从具有这种格式的 excel 生成一个 csv 文件

ConceptId   |   31   |   32   |   33   |   34   |   35   |   36   |
EmployeeId  |        |        |        |        |        |        |
    1       |        |  44.00 |  56.00 |        |        |        |
    2       |        |        |        |        |        |        |
    3       |        |        |  44.00 |  5.00  |  5.00  |        |
    4       | 445.00 |  5.00  |        |        |        |        |
    5       |        |        |  65.00 |  56.00 |  65.00 |        |

所以我想要一个 csv 看起来像这样

EmployeeId  |   ConceptId   |  Amount   |  
    1       |       32      |  44.00    |
    1       |       33      |  56.00    |
    3       |       33      |  44.00    |
    3       |       34      |   5.00    |
    4       |       31      | 445.00    |
    4       |       32      |   5,00    |
    5       |       33      |  65.00    |
    5       |       34      |  56,00    |
    5       |       35      |  65,00    |

我在 python 中使用 pandas,但我有初级编码技能,所以我很难迭代行以生成排除空单元格的 csv

这是我到目前为止将我的 excel 文件完全转换为 csv 文件的代码

import pandas as pd

df = pd.read_excel('excelfile.XLSX', index_col=0, header=None)

df.to_csv('csvfile.csv')

任何的想法?

标签: pythonexcelpandascsv

解决方案


你只需要stack数据框:

df = pd.read_excel('excelfile.XLSX', index_col=0, header=None)
df = df.stack().rename('Amount').reset_index()
df.to_csv('csvfile.csv', index=False)

生成的 csv 文件将是:

EmployeeId,ConceptId,Amount
1,32,44.0
1,33,56.0
3,33,44.0
3,34,5.0
3,35,5.0
4,31,445.0
4,32,5.0
5,33,65.0
5,34,56.0
5,35,65.0

推荐阅读