使用pandas.read_sas()时如何保留列的数据类型?

时间:2018-06-23 21:38:24

标签: python pandas csv

this SAS file读取到熊猫数据框中时,所有列类型都将转换为 floats (不保留列类型)。

以下是Python代码:

import os
import pandas as pd

data_dir = os.getcwd()
sas_file = os.path.join(data_dir, 'airline.sas7bdat')

iter_sas = pd.read_sas(sas_file, iterator=True, chunksize=1000)

for chunk in iter_sas:
    print(chunk.head())

输出以下内容:

          YEAR      Y      W       R      L      K
0  1948.000888  1.214  0.243  0.1454  1.415  0.612
1  1949.000888  1.354  0.260  0.2181  1.384  0.559
2  1950.000011  1.569  0.278  0.3157  1.388  0.573
3  1951.000011  1.948  0.297  0.3940  1.550  0.564
4  1952.000000  2.265  0.310  0.3559  1.802  0.574

使用pandas.read_sas()时如何保留列的数据类型?

2 个答案:

答案 0 :(得分:0)

this answer中所述,您必须首先导入以下内容

from sas7bdat import SAS7BDAT

,然后将文件投射为

SAS7BDAT("airline.sas7bdat")

然后您可以将其转换为数据框。

   YEAR      Y      W       R      L      K
0  1948.0  1.214  0.243  0.1454  1.415  0.612
1  1949.0  1.354  0.260  0.2181  1.384  0.559
2  1950.0  1.569  0.278  0.3157  1.388  0.573
3  1951.0  1.948  0.297  0.3940  1.550  0.564
4  1952.0  2.265  0.310  0.3559  1.802  0.574

答案 1 :(得分:0)

看起来像read_sas的错误仍然与另一个问题相同。第一个变量YEAR仅使用4个字节存储,而read_sas则是补编数字以填充缺少的4个字节,而不是用零个字节填充它们。

enter image description here

要么找到另一个真正了解SAS数据集结构的包,要么在读入值后四舍五入或转换这些值。