所以最近我一直在用 Excel 做一些事情,发现了一些奇怪的东西,我不知道如何处理。这是我的excel文件,我在里面放了一些随机数据。
然后我有以下代码将其写入熊猫数据帧:
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 的时间而不是在前面添加日期。
但是对于不是 00:00 的时间,框架没问题。我该如何处理?
答案 0 :(得分:0)
我怀疑 Excel 文件有问题。在 Excel 中有两种不同的时间显示方式:使用时间字段,或使用日期字段并仅显示时间部分。
您的问题是从 Pandas 直接访问 Excel 太聪明了,并试图使用基础数据而不是格式化文本。它有助于识别数据类型,但在这里它会将您带入意想不到的数据中。
这里有两种方法:
好方法:修复 Excel 文件中的数据。然后,无论您在该文件上使用什么处理,您都会获得正确的值。问题是不容易识别有问题的单元格并在其中输入正确的值...
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)
经过一番折腾,我发现如果你以前遇到过这个错误,把整列变成一个字符串是最容易的。然后将字符串从有空格的地方分成几部分。然后取最后一个值。这给我留下了时间价值。