[英]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 太聪明了,并试图使用基础数据而不是格式化文本。 它有助于识别数据类型,但在这里它会将您带入意想不到的数据。
您有两种方法:
好方法:修复 Excel 文件中的数据。 然后,无论您对该文件使用什么处理,您都将获得正确的值。 问题是识别有问题的单元格并在其中输入正确的值并不容易......
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.