Python Pandas读取日期列为字符串

2024-10-01 17:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在excel文件中有一些数据,我用pandas read_excel方法读取。 但是,我想将所有列中的整个数据作为字符串读取,包括date列。在

问题是我想保留日期列的原始格式为string。例如,我在excel中有'31.01.2017',它的格式是date,我想在我的数据框中有'31.01.2017'。在

我认为使用read_excel的dytpes参数和dtype=str是正确的方法。但是pandas将date列作为datetime读取,然后将其转换为string。所以最后我的数据框里总是有“2017-01-31 00:00:00”。在

有办法吗?在


Tags: 文件数据方法字符串pandasread参数datetime
3条回答
df['date_column'] = df['date_column'].dt.strftime('%d.%m.%Y')

熊猫的行为很有道理:

  • 如果日期列的excel格式是文本,pandas将读取 默认情况下,日期为字符串。在
  • 如果日期列的excel格式是date,pandas将把日期读作日期。在

但是,您需要指出,在Excelfile中,date列的格式是日期。如果是这样的话,那么Excelfile中没有字符串可以开始。date列的底层数据存储为float。您看到的字符串不是实际数据。如果不是字符串,则不能将其作为原始字符串读取。在

更多信息: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

^{2}$

然后应用它

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时间映射。在

可能会有更实际的方法来做到这一点,比如接收csv格式的数据,或者只是将日期保存在excel的文本格式中。在

当您试图将日期列保持为初始类型时,下面的代码可能会对您有所帮助。在第一行中,我们将除日期列之外的所有列插入变量“cols”,然后在下面的两行中,我们只更改其余列的类型:

cols=[i for i in df.columns if i not in ["Date_column"]]

for col in cols:
    df[col]=df[col].astype('category')

希望有帮助!:-)

相关问题 更多 >

    热门问题