簡體   English   中英

Pandas 在讀取 SAS 文件時因正確的數據類型而失敗

[英]Pandas fails with correct data type while reading a SAS file

我有一個SAS 數據集,當我運行它時,我在 SAS 上得到以下輸出:

在此處輸入圖片說明

我還有以下 Python 代碼,它獲取 .sas7bdat 文件並顯示輸出,即這里的前五個觀察結果。

import pandas as pd
file_name = "cars.sas7bdat"
my_df = pd.read_sas(file_name)
my_df = my_df.head()
print(my_df)

在此處輸入圖片說明

如您所見,當涉及整數數據類型時,它無法正常工作。 CYL 和 WGT 變量是整數,但如果我使用 pandas 的read_sas 函數,則無法正確顯示。

知道這到底是怎么回事嗎?

SAS 將所有數字表示為 64 位(8 字節)浮點數。 但是您可以通過告訴它存儲少於 8 個字節來節省磁盤空間。 您發布的數據集為 CYL 和 WGT 執行了此操作。

在此處輸入圖片說明

當 SAS 從磁盤讀回數據集以使用時,它將丟失的最低有效字節設置為二進制零。 顯然read_sas不明白這一點,它沒有將丟失的字節設置為二進制零,而是做了其他事情。 因此,看似隨機的數據。

CYL 的第一個值是8 ,在 IEEE 浮點數中將是十六進制代碼

40 20 00 00 00 00 00 00

您顯示的值8.00046將改為此值。

40 20 00 06 07 80 FD C1

終於解決了這個問題。 嗯,這似乎肯定是熊貓的錯誤​​。 我通過鍵入以下內容(安裝)直接使用了 .sas7bdat 庫:

pip install sas7bdat

然后我運行以下代碼:

import sas7bdat
from sas7bdat import *

file_name = file_path + "cars.sas7bdat"
foo = SAS7BDAT(file_name)
my_df = foo.to_data_frame()
my_df = my_df.head()
print(my_df)

運行上述代碼后,我在 Python 中得到以下輸出:

在此處輸入圖片說明

所以,我得到了顯示正確數據類型的輸出。

希望 Pandas 開發者找到解決上述 bug 的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM