【问题标题】:Pandas DataFrame Auto Parsing DatesPandas DataFrame 自动解析日期
【发布时间】:2019-11-21 16:05:11
【问题描述】:

我试图将一堆 ExcelSheets 加载到 Oracle 表中。 excel表格不一致。所以Oracle中的表需要根据Excelsheets中的列动态生成。这是我在互联网上找到的最简单的解决方案,所以我继续采用这种方法。我是 Python 的新手。

以下面的结构为例。

我正在尝试将以下 excel 导入到 MEM_TABLE 表中。 DATE 字段不一致,可以有 NA、_ND 或 Date 作为值。

我用来加载excel的代码如下

xls_file = pd.ExcelFile("Excel File")

df =  xls_file.parse('Sheet1',parse_dates=True)
df =  df.replace(np.nan, '') #replace NaN with blank string
df = df.replace('NA', '') #replace "NA" with blank string
df = df.replace('_ND', '') #replace "NA" with blank string
df.to_sql('MEM_TABLE', conn_ora, if_exists='append', index = False )

to_sql 方法创建的表具有以下结构

MEM_TABLE(
  date    CLOB         NULL,
  emp_nbr NUMBER(19,0) NULL
)

在数据框中,它读取类似这样的内容

 DATE                       EMP_NBR
0                             2
1  2018-01-04 00:00:00        1
2  2018-01-01 00:00:00        2
3  2018-01-03 00:00:00        1
4                             1
5                             1

看起来 Pandas 在创建 DataFrame 时会自动转换 2018 年 1 月 4 日至今。 我在下面遇到的错误,我相信这是因为表 MEM_TABLE 中的 DATE 列是 CLOB 并且在 dataFrame 中,日期字段具有 DATE 对象。看起来日期对象无法插入到 CLOB 单元格中。

TypeError: 期望字符串或字节对象

如果日期是字符串(即“1/4/2018”),我不会收到任何错误。

我的问题是 无论如何在创建数据框时禁用日期字段上的自动解析?

【问题讨论】:

    标签: python oracle pandas dataframe cx-oracle


    【解决方案1】:

    读取 pandas 数据框时,使用'parse_dates' = False

    df = xls_file.parse('Sheet1',parse_dates=False)

    【讨论】:

    • 我试过了,同样的问题。 DataFrame 在日期中有日期对象
    • 看起来 parse_dates 不起作用。找到一个链接here。不确定现在是否成立。如果有人对此有解决方法,我会很高兴
    【解决方案2】:

    我使用的解决方法是创建了一个方法undate(用于现有解决方案)将日期恢复为原始格式。并在所有 DataFrame 列中运行该方法。实施是蛮力但它有效:P。我的最终代码看起来像这样。

    def undate(x):
        if pd.isnull(x):
            return x
        try:
            return x.strftime('%d/%m/%Y')
        except AttributeError:
            return x
        except Exception:
            raise
    
    for col in df.columns:
            df[col] = df[col].apply(undate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2015-09-01
      • 2021-09-03
      • 2021-02-07
      • 2014-05-18
      相关资源
      最近更新 更多