Python:使用熊猫从excel转换为CSV时,请保持前导零

时间:2018-11-27 09:30:23

标签: python excel pandas csv

我有一个要插入数据库的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 个答案:

答案 0 :(得分:2)

来自docs

  

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

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

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