当我运行以下代码时
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,这会在以后的数据处理中引起重大问题。
这是怎么回事?
答案 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个选择:
我只是想重现您的问题,没有成功:
>>>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语言环境设置发生了任何变化。