gpt4 book ai didi

python - 将所有日期时间列 ('
转载 作者:行者123 更新时间:2023-12-01 09:15:11 25 4
gpt4 key购买 nike

我的项目涉及进行各种 SQL 查询,通过 pandas 将它们转换为 python 中的数据帧,按用户名列进行过滤,然后将过滤后的数据帧输出到单个 HTML 文件,这些文件将转换为 PDF 并发布。

我遇到了一个问题,即当日期列出现在 HTML 中时,它们是 YY-MM-DD-HH-MM-SS 但我希望它们是 YY-MM-DD 以使PDF 输出看起来更干净。

我知道我可以使用以下方法将单个命名列转换为所需的输出:

dataset['datecolumn'] = dataset['datecolumn'].dt.date

我确实设法使用上述方法解决了问题,方法是获取列名称列表,然后应用 for 循环,如下所示:

datecollist = list(dataset.select_dtypes(include=['datetime64']).columns)
for i in datecollist:
dataset[i] = dataset[i].dt.date

但是我真的很想找到一种更Pythonic的方法来解决这个问题,因为我想避免代码中进一步的for循环并通过Python能力来改进。

到目前为止,我尝试了一个映射器函数,但没有任何运气:

mapper = lambda x: x.dt.date if isinstance(x, np.datetime64) else x
dataset.columns = dataset.columns.map(mapper)

它似乎只是跳过了我要转换的列。我注意到,当我检查这些列的数据类型时,它们显示为:

in: dataset['First Date'].dtype
out: dtype('<M8[ns]')

任何人都可以建议我的映射器方法出了问题,或者向我展示一种更有效/更干净的解决问题的方法吗?

最佳答案

由于您的数据来自 SQL,因此另一个选项是在 SQL 中预先将所有日期时间转换为日期。例如,使用:

How to return only the Date from a SQL Server DateTime datatype

只有当您在代码中不需要完整的日期时间时,这才有效 - 即所有逻辑仅使用日期。

虽然我也喜欢推导式的优雅(不必编写 for 循环!),但有时我最终会觉得它们笨拙且难以阅读,尤其是条件逻辑和映射函数。此外,它们的错误检查更加困难,因为它们试图同时应用多个操作。

在这种情况下,我使用的是简单的检查和重铸。

生成一些可测试的数据:

import pandas as pd
import numpy as np
from datetime import datetime

def make_data (n):

ts1 = datetime.now().timestamp() + abs(np.random.normal(1000, 30, n)).cumsum()
ts2 = datetime.now().timestamp() + abs(np.random.normal(2000, 10, n)).cumsum()

df = pd.DataFrame({
'c1': np.random.choice(list('ABCDEFGH'), n),
'c2': np.random.choice(list('ABCDEFGH'), n),
'c3': np.random.choice(list('ABCDEFGH'), n),
'i1': np.random.randint(1, 20, n),
't1': pd.to_datetime(ts1, unit='s'),
't2': pd.to_datetime(ts2, unit='s'),
'x1': np.random.randn(n),
'x2': np.random.randn(n),
'x3': np.random.randn(n)
})

return df

df = make_data(100)

然后将所有日期时间转换为日期:

# convert datetimes to just the date
for col in df.columns:
if df[col].dtype == 'datetime64[ns]':
df[col] = df[col].dt.date

更容易变成带有错误检查(try、 except)的通用函数,或者用于将对象转换为类别或将 int 转换为 float,或者...

关于python - 将所有日期时间列 ('<M8[ns]' ) 转换为在输出到 HTML 时仅显示日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51340219/

25 4 0

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