Pandas DataFrame 自动解析日期

Pandas DataFrame Auto Parsing Dates

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

有点新手

以如下结构为例。

我正在尝试将以下 excel 导入 MEM_TABLE 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方法创建的table具有以下结构

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

在 dataframe 中它是这样读的

 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 日为止。 我得到的错误,我认为是因为 table MEM_TABLE 中的 DATE 列是 CLOB 并且在 dataFrame 中,日期字段具有 DATE 对象。看起来日期对象不能插入到 CLOB 单元格中。

TypeError: expecting string or bytes object

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

我的问题是 在创建数据框时,是否有禁用日期字段上的自动解析的功能?

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

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

我使用的解决方法是我创建了一个方法 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)