使用正确的日期格式(以CSV文件格式)将SAS lib导出到csv

时间:2019-07-16 14:05:19

标签: python pandas sas export-to-csv

我使用: Python 3.7 SAS v7.1企业版

我想将一些数据(从库中)从SAS导出到CSV。之后,我想将此CSV导入Pandas Dataframe并使用它。 我遇到了问题,因为当我使用以下代码从SAS导出数据时:

proc export data=LIB.NAME

outfile='path\to\export\file.csv'
dbms=csv
replace;
run;

每个列均正确导出,而不是带有日期的列。在SAS中,我看到类似以下内容:

06NOV2018
16APR2018

依此类推...在CSV中,外观相同。但是,如果我将CSV导入到DataFrame中,不幸的是,Python会看到带有日期的列是Object / string而不是日期类型。

这是我的问题。如何使用正确的列类型(尤其是带有日期的列)从SAS将整个库导出到CSV。也许我应该在导出之前进行一些转换?请Plz帮助我,在SAS中我是新手,我想从中导入数据并在Python中使用它。

在编写某些内容之前,请记住,我曾经尝试过使用熊猫的read_sas函数,但是在此命令过程中,我遇到了这样的Exception错误:

df1 = pd.read_sas(path)
  

ValueError:意外的非零end_of_first_byte异常被忽略   在:'pandas.io.sas._sas.Parser.process_byte_array_with_data'追溯   (最近一次通话最近):文件“ pandas \ io \ sas \ sas.pyx”,位于第31行   pandas.io.sas._sas.rle_decompress

我放置了fillna函数并显示相同的错误:/

df = pd.DataFrame.fillna((pd.read_sas(path)), value="")

我在Python中尝试使用sas7bdat模块,但是遇到了同样的错误。 然后,我尝试使用sas7bdat_converter模块。但是CSV在“日期”列中具有相同的值,因此在将csv转换为DataFrame之后,dtype的问题就会出现。

您有任何建议吗?我花了2天的时间试图弄清楚,但没有任何积极的结果:/

1 个答案:

答案 0 :(得分:1)

关于read_sas错误,已报告Git issue,但由于缺少可复制的示例而被关闭。但是,我可以使用从SAS 9.4 base生成的.sas7bdat文件通过Pandas轻松导入SAS数据文件(可能是v7.1 Enterprise)。

但是,请考虑使用read_csv parse_dates 参数,因为它可以在导入期间将日期DDMMMYY格式转换为日期时间。 SAS导出的数据集无需更改。

sas_df = pd.read_csv(r"path\to\export\file.csv", parse_dates = ['DATE_COLUMN'])