数据帧自动分析日期

2024-04-30 01:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

以下面的结构为例。你知道吗

enter image description here

我正在尝试将下面的excel导入到MEM\u表中。日期字段不一致,可以将NA、\n ND或日期作为值。你知道吗

下面是我用来加载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
)

在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

看起来熊猫是自动铸造1/4/2018到目前为止,当创建数据帧。 下面我得到的错误,我认为是因为表MEM\u table中的DATE列是CLOB,而在dataFrame中,DATE字段有DATE object。看起来无法将日期对象插入CLOB单元格。你知道吗

TypeError: expecting string or bytes object

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

我的问题是 在创建数据帧时,是否仍要禁用日期字段的自动解析?你知道吗


Tags: 方法dfdatestringwithxls结构excel
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)

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

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

相关问题 更多 >