【问题标题】:Python: Keep leading zeroes when converting from excel to CSV with pandasPython:使用熊猫从 excel 转换为 CSV 时保持前导零
【发布时间】:2019-04-29 00:08:47
【问题描述】:

我有一张要插入数据库的 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 时,如何保留前导零?

【问题讨论】:

    标签: python excel pandas csv


    【解决方案1】:

    来自docs:

    dtype :类型名称或列的字典 -> 类型,默认无
    数据或列的数据类型。例如。 {‘a’: np.float64, ‘b’: np.int32} 使用对象来保存存储在 Excel 中的数据,而不是解释 dtype。如果指定了转换器,则将应用它们代替 dtype 转换。
    0.20.0 版中的新功能。

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

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

    【讨论】:

    • 不走运,它仍然写为“37”而不是“0037”进入csv
    • 我必须重新格式化包含邮政编码的单元格!我以为它设置为文本,但经过测试,我显然已将其更改为 excel 中的邮政编码。我将其格式化回来,现在一切似乎都正确!感谢您的帮助@SpghttCd!
    • 希望解决方案对你有用:stackoverflow.com/questions/41240535/…
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多