首页 > 编程问答 >Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式

Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式

时间:2024-07-23 13:37:40浏览次数:13  
标签:python excel pandas date formatting

我正在使用 PDF4me API 将 PDF 发票转换为 Excel 文件。 API 可以正确读取日期。但是,当我打开 Excel 文件时,日期显示不一致:

  1. 某些日期以正确的格式 (dd/mm/yyyy) 显示,而其他日期以错误的 mm/dd/yyyy 格式显示。当该月的某天小于或等于 12 时,似乎会出现这种不一致。

  2. 尽管格式不正确的日期最初显示为 dd/mm/yyyy,但当我单击单元格时,它们会恢复为 mm/dd/yyyy .

  3. 如果我将 Excel 文件转换为 CSV,所有日期均以正确的 dd/mm/yyyy 格式显示。 期望的行为:

  4. 我希望 Excel 文件中的所有日期格式一致为 dd/mm/yyyy,无论该月的哪一天是否小于或等于 12。这也应该与 Pandas 的读取方式一致

当前行为:

当我将 Excel 文件读入 Pandas DataFrame 时,日期格式不一致会导致我的分析出现问题。我无法手动更正这些问题,因为 Excel 文件是自动生成的。

附加说明:

  • PDF 发票本身的日期格式是正确的 dd/mm/yyyy。
  • 我怀疑这是由于 Excel 自动生成的基于区域设置的日期格式。
  • 我无法直接控制 PDF4me API 的 Excel 生成过程。

问题: 如何确保 Excel 文件中的日期格式一致为 dd/mm/yyyy读入 Pandas,或者如何让 Pandas 正确读取日期,尽管存在不一致?

示例数据:

发票日期(Excel 显示) 发票日期(单击时的实际值)
20/07 /2024 20/07/2024
04/06/2024 06/04/2024

代码块:(已尝试以下选项)

# Read the Excel file into a DataFrame
xls = pd.ExcelFile(excel_path)

for sheet_name in xls.sheet_names[:-1]:
    df = pd.read_excel(xls, sheet_name=sheet_name,
         date_format="%d.%m.%Y")

# Tried this in old versions
df = pd.read_excel(xls, sheet_name=sheet_name,
         date_format="%d.%m.%Y", dayfirst=True)

Excel 屏幕截图

[![在这种情况下,可见日期与实际值相同][1]][1] [1]: https://i.sstatic.net/Zfa2HdmS.png

[![在这种情况下,可见日期的格式不同][2]][2] [2]:https://i.sstatic.net/JfGA8Ya2.png


理解面临的挑战。问题在于 Excel 将某些日期解释为美国格式 (mm/dd/yyyy),而其他日期则解释为的预期格式 (dd/mm/yyyy)。由于无法控制 Excel 生成过程,我们可以尝试在 Pandas 中解决此问题。

以下是 Pandas 解决此问题的步骤:

  1. 将有问题的列读取为字符串: 这可以防止 Pandas 自动将日期解释为日期时间对象。

  2. 使用 Pandas 的 to_datetime 函数转换日期: to_datetime 函数有一个参数 dayfirst ,可以用来强制将日期解释为以日为先。

```python import pandas as pd

# 将 Excel 文件读入 Pandas DataFrame df = pd.read_excel("your_excel_file.xlsx", dtype={'Invoice Date': str})

# 将“Invoice Date”列转换为日期时间对象,强制以日为先 df['Invoice Date'] = pd.to_datetime(df['Invoice Date'], dayfirst=True) print(df) ```

这应该可以将“Invoice Date”列中的所有日期转换为正确的格式,无论它们最初是如何在 Excel 中格式化的。

其他提示:

  • 检查空值: 在转换日期之前,最好检查的数据中是否有任何空值或 NA 值,因为这些值可能会导致错误。可以使用 df.isnull().sum() 来检查每一列中的空值。
  • 处理错误: 如果 to_datetime 函数无法解析某些日期,可以使用 errors='coerce' 参数将它们强制转换为 NaT (非时间戳)。然后,可以分别处理这些错误。

请记住: 这种方法假设的日期始终以两位数的天数表示(例如,01、02、... 10、11 ...)。如果的日期包含一位数的天数(例如,1、2、... 10、11 ...),则需要调整代码以考虑这种情况。

我希望这有帮助!如果还有其他问题,请告诉我。

标签:python,excel,pandas,date,formatting
From: 78772581

相关文章

  • 有没有办法选择将数据框上传到 CSV 的哪个单元格/列,就像将数据抓取到 Excel 文件中一
    我有将网络数据抓取到Excel文件中的经验,并且我知道将数据复制到Excel电子表格中时,您可以选择将其复制到哪一列。(startcol=10如下面的代码片段所示)withpd.ExcelWriter("jockeyclub.xlsx",engine="openpyxl",mode='a',if_sheet_exists='overlay')aswriter:......
  • python-input键盘输入
     str=input("请输入:")#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str) aa='请输入:'str=input(aa)#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str)      ......
  • Winform小工具:.txt档转excel档
    privatevoidbt_txt_to_excel_Click(objectsender,EventArgse){FolderBrowserDialogfolderDialog=newFolderBrowserDialog();if(folderDialog.ShowDialog()==DialogResult.OK){string......
  • Python从0到100(四十五):从字符串到前后端分离
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时
    屏幕截图我不断收到此错误:RuntimeError:Failedtocreateadefault.NETruntime,whichwouldhavebeen"mono"onthissystem.Eitherinstallacompatibleruntimeorconfigureitexplicitlyvia......
  • Python 在模块中使用变量
    如何将一个文件中声明的变量调用到另一个文件中?大家好我已经在file1中声明了我的变量。我的函数位于file2中,它使用该变量。如何调用主文件中声明的变量。提前致谢当然可以!以下是如何在Python中跨文件使用变量:file1.py(包含变量的文件)#在file1.p......
  • Pandas:递归的性能优化
    我有一个代码,看起来像forindex,rowindata.iterrows():data.loc[index,"myCol"]=someFunc(data.loc[index-1,"myCol")该代码正在使用递归,因此我无法对其进行矢量化,因为在许多与iterrows性能相关的问题中都建议使用递归。我在性能方面优化它的最佳方法是什......
  • Python 类型提示和 linter
    我一直在向我们的python项目添加静态类型检查,例如像这样:fromtypingimportListfromsomethingimportMyOtherClassclassMyClass:def__init__(self)->None:self.some_var=None#type:List[MyOtherClass]但是,现在我们使用的linter(flake8和......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......