繁体   English   中英

Pandas 00:00 的奇怪日期?

[英]Pandas Weird Date For 00:00?

所以最近我一直在 Excel 中研究一些东西,并且发现了一些奇怪的东西,我不知道如何处理。 这是我的 excel 文件,我在其中放入了一些随机数据。

在此处输入图像描述

然后,我将以下代码写入 pandas dataframe:

import pandas as pd

df = pd.read_excel('excel.xlsx', engine = 'openpyxl')

duplicate_df = df.copy()
duplicate_df = df.dropna(axis = 0, how = 'all')

duplicate_df

但是,正如我们从 dataframe 中看到的那样,当我将 00:00 作为条目时,我也可以看到日期吗? 我只想要 00:00 的时间,而不是在前面添加日期。

在此处输入图像描述

但是对于不是 00:00 的时间,帧很好。 我该如何处理?

我怀疑 Excel 文件中存在问题。 在 Excel 中显示时间有两种不同的方式:使用时间字段,或使用日期字段并仅显示时间部分。

您的问题是从 pandas 直接访问 Excel 太聪明了,并试图使用基础数据而不是格式化文本。 它有助于识别数据类型,但在这里它会将您带入意想不到的数据。

您有两种方法:

  1. 好方法:修复 Excel 文件中的数据。 然后,无论您对该文件使用什么处理,您都将获得正确的值。 问题是识别有问题的单元格并在其中输入正确的值并不容易......

  2. tsv 或 csv 解决方法:因为 Excel 知道 CSV 文件是文本文件,它会在其中写入格式化的值。 因此,您可以以 csv 格式导出文件并从 pandas 加载它。 缺点是每次更改文件时都必须重新导出文件。

您面临的问题是由于用于将 excel 文件解析为 pandas 数据帧(即 openpyxl)的引擎而出现的。

如果您构建一个数据框而不给引擎参数任何值(默认为“无”),那么您的问题将得到解决。

就像是:

df = pd.read_excel('excel.xlsx')

代替

df = pd.read_excel('excel.xlsx', engine = 'openpyxl')

如果在不使用引擎的情况下出现一些错误,请尝试使用引擎,然后再更改值。

所以,

df = pd.read_excel('excel.xlsx', engine = 'openpyxl')
for i in df.index:
    if 1899 == df['Start Time'].iloc[i].year:
        time = df['Start Time'][i].time()
        df['Start Time'][i] = time

对于“结束时间”也可以这样做。

在这里,时间存储在一个临时变量中(不是来自纪元,而只是时间戳),然后将其存储回数据帧中。

经过一番折腾,我发现如果你以前遇到过这个错误,把整列变成一个字符串是最容易的。 然后将字符串拆分为有空格的部分。 然后取最后一个值。 这只是给我留下了时间价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM