使用python转换为CSV UTF-8时,我的日期列被转换为日期时间

时间:2018-12-20 12:56:23

标签: python excel pandas

当我运行以下代码时

import glob,os
import pandas as pd
dirpath = os.getcwd()
inputdirectory = dirpath

for xls_file in glob.glob(os.path.join(inputdirectory,"*.xls*")):    
     data_xls = pd.read_excel(xls_file, sheet_name=0, index_col=None)
     csv_file = os.path.splitext(xls_file)[0]+".csv"
     data_xls.to_csv(csv_file, encoding='utf-8', index=False)

它将根据需要将文件夹中的所有xls文件转换为CSV。 但是,这样做时,任何日期(例如20/12/2018)都将转换为20/12/2018 00:00:00,这会在以后的数据处理中引起重大问题。

这是怎么回事?

3 个答案:

答案 0 :(得分:5)

本质上没有什么“错”。您只需要向df.to_csv提供自定义date_format

  

date_format:字符串,默认为无               日期时间对象的格式字符串

在您的情况下

data_xls.to_csv(csv_file, encoding='utf-8', index=False, date_format='%d/%m/%Y')

这将确定原始数据保存到文件的方式。如果您将在Excel中打开文件,则可能仍会以完整格式看到它。这是因为Excel会尝试根据其内容假定单元格格式。您将需要右键单击该列并选择其他单元格格式,熊猫或Python对此无能为力(只要您使用to_csv而不是to_excel)。

答案 1 :(得分:0)

如果以上答案仍然无效,请尝试此操作?

import datetime as dt
xls_data['date']=pd.to_datetime(xls_data['date'], format="%d/%m/%y")
xls_data['date'] = xls_data['date'].dt.date

答案 2 :(得分:-1)

原始的xls文件实际上将此字段存储为datetime。

使用Excel打开它时-您会根据设置/操作系统区域设置/等看到它以Excel认为想要查看它的方式格式化。

当python读取文件时,日期单元格成为python日期对象。

CSV文件基本上只是文本,不能包含日期时间对象。

当python需要将datetime对象写入文本文件时,它将获取全文。

因此,您有2个选择:

  1. 将原始文件日期列更改为文本类型。 或更好的选择:
  2. 使用python迭代此字段,并将其更改为您希望在csv中看到的文本格式。

我只是想重现您的问题,没有成功:

>>>import pandas as pd
>>>xls_data = pd.read_excel('test.xls', sheet_name=0, index_cole=None)
>>>xls_data
    name       date
0  walla 1988-12-10
1   cool 1999-12-10
>>>xls_data.to_csv(encoding='utf-8', index=False)
'name,date\nwalla,1988-12-10\ncool,1999-12-10\n'`

P.S。每当处理datetime对象时,都应测试结果,以查看是否根据您的pc语言环境设置发生了任何变化。