熊猫奇怪的日期为 00:00?

时间:2021-03-04 15:50:23

标签: python excel pandas

所以最近我一直在用 Excel 做一些事情,发现了一些奇怪的东西,我不知道如何处理。这是我的excel文件,我在里面放了一些随机数据。

enter image description here

然后我有以下代码将其写入熊猫数据帧:

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

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

enter image description here

但是对于不是 00:00 的时间,框架没问题。我该如何处理?

3 个答案:

答案 0 :(得分:0)

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

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

这里有两种方法:

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

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

答案 1 :(得分:0)

您面临的问题是由于用于将 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

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

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

答案 2 :(得分:0)

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