我的项目涉及进行各种 SQL 查询,通过 pandas 将它们转换为 python 中的数据帧,按用户名列进行过滤,然后将过滤后的数据帧输出到单个 HTML 文件,这些文件将转换为 PDF 并发布。
我遇到了一个问题,当日期列出现在 HTML 中时,它们是 YY-MM-DD-HH-MM-SS,但我希望它们是 YY-MM-DD 以使 PDF 输出看起来像清洁工。
我知道我可以使用以下命令将单个命名列转换为所需的输出:
dataset['datecolumn'] = dataset['datecolumn'].dt.date
Run Code Online (Sandbox Code Playgroud)
我确实设法使用上述方法解决了问题,方法是获取列名称列表,然后应用 for 循环,如下所示:
datecollist = list(dataset.select_dtypes(include=['datetime64']).columns)
for i in datecollist:
dataset[i] = dataset[i].dt.date
Run Code Online (Sandbox Code Playgroud)
然而,我真的很想找出一种更Pythonic的方法来解决这个问题,因为我想避免代码中进一步的for循环并通过Python能力来改进。
到目前为止,我尝试了一个映射器函数,但没有任何运气:
mapper = lambda x: x.dt.date if isinstance(x, np.datetime64) else x
dataset.columns = dataset.columns.map(mapper)
Run Code Online (Sandbox Code Playgroud)
它似乎只是跳过了我想要转换的列。我注意到,当我检查这些列的数据类型时,它们显示为:
in: dataset['First Date'].dtype
out: dtype('<M8[ns]')
Run Code Online (Sandbox Code Playgroud)
谁能建议我的映射器方法出了问题,或者向我展示一种更有效/更干净的解决问题的方法?