Skip to content

Stata

Stata 是比较流行的统计应用程序,它的数据类型和 pandas 中略有差别,而且由于存在多个不兼容的版本所以转换起来会比较复杂。

Stata 数据文件支持的数据类型有限,仅包括字符串(118 之前的版本并不支持 unicode 而且长度还有限制)、int8、int16、int32、float32 和 float64。他对缺失值的处理也有一些不同,nan 在 Float 中能够被正确处理,而DataFrame 中的缺失值没有办法导出到 dta 文件中

to_stata()

to_stata() 用于将 DataFrame 导出为 Stata 的 dta 格式:

Python
DataFrame.to_stata(
  # 文件路径
  path:str|Path|buffer,
  # {column: 'tc'|'td'|'tm'|'tw'|'th'|'tq'|'ty'}
  # 未指定的列会转换为 'tc' 时间对象不能包含时区
  convert_dates:dict=None,
  # 将索引写入 stata
  write_index=True,
  # "<"|">"|"little"|"big" 大端小端序,默认是 `sys.byteorder`
  byteorder=None,
  # 文件创建时间戳,默认当前时间
  time_stamp=None,
  # 数据集的 data label,说白了就是描述该数据
  data_label:str=None,
  # {column: variable_labels} 定义列的 variable labels
  variable_labels:dict=None,
  # 114 - stata10兼容(字符串长度最大244)
  # 117 - stata13兼容(字符串长度更大(200w))
  # 118 - stata14兼容(开始支持unicode)
  # 119 - stata15兼容,除非字段太多(支持超过 32767 字段)否则推荐使用 118
  version=114,
  # 要转换为字符串的列,仅 117 可用。会转换为 stata strL 格式(长字符串格式)
  convert_strl:list=None,
  # 压缩,默认会根据 path 的后缀识别
  # 可以是 zip gzip bz2 zstd xz tar
  compression='infer',
  storage_options=None,
  # {column: value label} 添加 value label
  value_labels:dict=None
)

这其中大量的参数是指定 stata 的各种标签:

Text Only
# 变量名        存储类型    显示格式    值标签      变量标签
---------------------------------------------------------------------
Variable      Storage   Display    Value
    name         type    format    label      Variable label
---------------------------------------------------------------------
make            str18   %-18s                 品牌
price           int     %8.0gc                Price
mpg             int     %8.0g                 每加仑油行使里程数
rep78           int     %8.0g                 Repair record 1978
headroom        float   %6.1f                 Headroom (in.)
trunk           int     %8.0g                 Trunk space (cu. ft.)
weight          int     %8.0gc                Weight (lbs.)
length          int     %8.0g                 Length (in.)
turn            int     %8.0g                 Turn circle (ft.)
displacement    int     %8.0g                 Displacement (cu. in.)
gear_ratio      float   %6.2f                 Gear ratio
foreign         byte    %8.0g                 foreignlabel Car origin
---------------------------------------------------------------------
  • Variable name: 变量名,对应的就是 DataFrame 的列名
  • Storage type: 存储类型,由 to_stata 自动帮我们转换
  • Display format: stata 的预览属性,不需要我们关心
  • Value label: 值标签,用来描述值的说明性字符串,可以使用 value_labels 定义
  • Variable label: 变量标签,描述变量的标签
  • data label: 数据集标签,对整个 dta 的描述

Tips

他们类似于数据库中的 COMMON

read_stata()

Python
pandas.read_stata(
    filepath_or_buffer,
    convert_dates=True,
    convert_categoricals=True,
    index_col=None,
    convert_missing=False,
    preserve_dtypes=True,
    columns=None,
    order_categoricals=True,
    chunksize=None,
    iterator=False,
    compression='infer',
    storage_options=None
)

参考