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
)