Python:使用pandas将Excel转换为CSV时保留前导零

4
我有一个要插入数据库的Excel表格。我写了一个Python脚本,它可以将Excel文件转换为CSV并将其插入到数据库中。问题是Excel表格包含邮政编码,而这些编码不幸地移除了前导零。
以下是读取Excel表格并将其放入CSV的代码:
def excel_to_csv():
    xlsx = pd.read_excel(excel_path + fileName + '.xlsx')
    xlsx.to_csv(csv_file, encoding='utf-8', index=False, na_rep=None, quoting=csv.QUOTE_NONE)


excel_to_csv()

然后我使用以下代码将其插入到数据库中:

with open(csv_file, 'rb') as f:
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
    next(reader)
    for row in reader:
        cur.execute(
            "INSERT INTO table (foo1, foo2, zipcode, foo3) VALUES (%s, %s, %s, %s); ",
            row
        )

conn.commit()

当我将Excel转换为csv并打印出来时,得到了以下结果:
foo1,foo2,zipcode,foo3
353453452,DATA,37,CITY
463464356,DATA,2364,CITY

在Excel文件中,邮政编码单元格被转换为文本格式以保留前导零,但是当我将Excel文件转换为CSV格式时,如何保留前导零?

1个回答

10

文档中可以看到:

dtype:类型名称或列->类型的字典,默认为None
数据或列的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32} 使用 object 保留数据,不解释 dtype。如果指定了转换器,则会应用于 dtype 转换的替代。
新版本0.20.0 中引入。

所以,您可以通过将 dtype-kwarg 设置为 object 来告诉 pd.read_excel 不解释数据:

xlsx = pd.read_excel(excel_path + fileName + '.xlsx', dtype='object')

3
不幸的是,它仍然以"37"而不是"0037"的形式写入了CSV文件。 - Klatten
我不得不重新格式化包含邮政编码的单元格!我以为它已经设置为文本,但在测试后,我显然将其更改为了Excel中的邮政编码。我重新格式化了它,现在一切似乎都正常了!感谢你的帮助@SpghttCd! - Klatten
1
希望这个解决方案对你有用:https://dev59.com/k1gR5IYBdhLWcg3whdfv#56660495 - yoonghm
你救了我的命!非常感谢你! - Jane Kathambi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接