我在excel文件中有一些数据,我使用pandas read_excel方法读取它。 但是,我想将所有列中的整个数据作为字符串读取,包括日期列。
问题是我想将日期列保留为原始格式的字符串。例如,我有' 31.01.2017'在Excel中,它被格式化为日期,我希望有' 31.01.2017'在我的数据框中。
我认为使用带有dtype = str的read_excel的dytpes参数是正确的方法。但是,pandas会将日期列读取为datetime,然后将其转换为字符串。所以最后我总是有2017-01-31 00:00:00'在我的数据框中。
有没有办法做到这一点?
答案 0 :(得分:1)
当您尝试将日期列保留在初始类型中时,以下代码可能对您有所帮助。在第一行中,我们插入变量" cols"除了日期列之外的所有列,然后在以下两行中我们只更改其余列的类型:
cols=[i for i in df.columns if i not in ["Date_column"]]
for col in cols:
df[col]=df[col].astype('category')
希望它有所帮助! : - )
答案 1 :(得分:0)
df['date_column'] = df['date_column'].dt.strftime('%d.%m.%Y')
答案 2 :(得分:0)
大熊猫的行为是有道理的:
但是,您指出在Excelfile中,日期列的格式为日期。如果是这种情况,则您的Excelfile中没有字符串开头。 date列的基础数据存储为浮点数。您看到的字符串不是实际数据。如果不是字符串,则无法将其作为原始字符串读取。
更多信息:https://xlrd.readthedocs.io/en/latest/formatting.html
但是,由于某种原因,您希望Python显示与Excel相同的格式,但是以字符串形式显示而不在Excel中查看。
首先,您必须找到格式:
from openpyxl import load_workbook
wb = load_workbook('data.xlsx')
ws = wb.worksheets[0]
print(ws.cell(1,5).number_format) # look at the cell you are interested in
> '[$]dd/mm/yyyy;@'
,然后转换为strftime函数可以理解的内容。 https://www.programiz.com/python-programming/datetime/strftime#format-code
form = form[3:-2]
form = form.replace('dd','%d')
form = form.replace('mm','%m')
form = form.replace('yyyy','%Y')
print(form)
> '%d/%m/%Y'
并应用
df.loc[:,"date_field"].apply(lambda x: x.strftime(form))
> 0 01/02/2018
1 02/02/2018
2 03/02/2018
3 04/02/2018
4 05/02/2018
但是,如果要使用多种Excel日期格式,则必须为每种格式进行strf-time映射。
可能会有更多实用的方法,例如以csv格式接收数据或仅将日期保留为excel文本格式。