gpt4 book ai didi

python - 尝试将 datetime.datetime 格式 2016-09-01 00 :00:00 to datetime. datetime 格式的列标题转换为 '2016-09-01'

转载 作者:太空狗 更新时间:2023-10-30 02:40:40 25 4
gpt4 key购买 nike

我已经使用 pandas 从 excel 文件导入数据并对其进行了清理。但我现在面临的问题是我所有的专栏都有日期时间格式的标题,就像这样,'2016-09-01 00:00:00',但我只需要这种格式'2016-09-01' .这些是我正在使用的代码:

import pandas
df7 = pandas.read_excel("abc.XLSX", sheetname = 0, header = 0, index_col=[0], skiprows= [0,1])
names = df7.columns.tolist()

所以名称包含我所有的列标题作为列表。当我一次获取一列并使用一个函数:strftime 时,它​​就起作用了。

names[1].strftime('%Y-%m-%d')

我得到了我想要的格式的预期结果。但是我想运行一个循环,以便在一个代码中完成所有 31 列。由于第一列标题是一个字符串变量“时间”,所以我在使用循环时离开第 0 列。我正在使用以下代码:

for i in names[1:33]: 
i.strftime('%Y-%m-%d')
print (i)

但是实际上什么也没有发生,格式仍然是一样的。我也尝试了另一种方法,但它也不起作用:

for i in names:
if i is type(datetime.datetime):
i.strftime('%Y-%M-%d')
else:
pass

它也不起作用。我什至没有收到任何错误。有什么建议吗?

最佳答案

请注意 strftime 不起作用inplace在自身。所以,你可能应该做 i=i.strftime('%Y-%m-%d')当你print时看到任何效果输出。

这是完成相同过程的有效方法:

1) 如果所有列的类型都是datetime64[ns]正如您所提到的,您可以使用 strftime并记住将这些更改分配回 .columns属性:

df.columns = df.columns.strftime("%Y-%m-%d")

另外,可以利用 .date 简单地返回它的日期部分并丢弃时间的属性。

df.columns = df.columns.date

2) 混合柜dtypes (dtypes 的组合)存在,然后您可以在 map 上的自定义函数的帮助下过滤这些列的类型方法:

import datetime

mapper = lambda x: x.strftime("%Y-%m-%d") if isinstance(x, datetime.datetime) else x
df.columns = df.columns.map(mapper)

关于python - 尝试将 datetime.datetime 格式 2016-09-01 00 :00:00 to datetime. datetime 格式的列标题转换为 '2016-09-01',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com