pandas数据分析42——读取和写入stata和spss的数据格式

python就是胶水语言,啥文件基本都能读取,而且pandas作为数据分析最好用的包,其功能自然也很多,可以读取各种数据文件。

本次就来演示一下怎么读取stata文件,和spss文件,他们不仅储存了数据和变量,还储存了变量的标签对应的含义,这也可以读取出来。


读取stata文件:

stata文件的后缀名是.dta,他的数据类似csv文件,但是只看英文变量名不知道什么意思。

 但是会有标签这东西:

所以我们需要读取数据,还需要处理标签。先处理标签。

先导入包:

import numpy as np
import pandas as pd

读取每个变量名称和对应的中文标签:

# 读取Stata文件的元数据
metadata = pd.io.stata.StataReader('cfps2020person_202306.dta')
# 获取变量标签的字典
variable_labels = metadata.variable_labels()
for var, label in variable_labels.items():
    print(f"Variable '{var}' has label '{label}'")

这么多变量,我们只需要一些变量,所以我们就把对应的中文名放入一个列表,然后过滤一下:

a=['工作总收入(元/年)','每周工作时间(小时/周)','雇主性质','雇主是个体工商户','是否有编制','工作地点','工作收入满意度',
 '工作时间满意度','一般工作7的单位/雇主性质','加载变量:受访者性别','加载变量:最近一次调查最高学历','年龄',
 '上哪类初中','上哪类高中','上哪类大专','上哪类本科','读硕士是脱产还是在职'
,'读博士是脱产还是在职','是否小学毕业','是否初中毕业'
,'是否高中毕业','是否大专毕业','是否本科毕业','是否硕士毕业','是否博士毕业','当前婚姻状态',]
filtered_labels = {key: value for key, value in variable_labels.items() if value in a}

 这样这里面就只有我们需要的变量名称和对应的中文标签了。我们下面正式读取数据然后进行筛选。

其实读取stata也很简单,和读取csv和excel差不多,

df=pd.read_stata('cfps2020person_202306.dta',convert_categoricals=False).replace('不适用',np.nan)\
.replace(-8,np.nan).replace(-1,np.nan).replace(77,np.nan).replace(-2,np.nan)
df.head()

 

替换了一些数值为空是因为他们都是不合法的值。

然后过滤出来我们需要的变量:

df=df[filtered_labels.keys()]
df.info()

然后查看对应的中文标签 


{key: value for key, value in variable_labels.items() if key in df1.columns}

修改一下名称,数据就可以用了。 

df=df.set_axis(['年龄','性别','最高学历','婚姻状态','雇主性质','工作地点','工作收入满意度','工作时间满意度','每周工作时间(小时/周)','工作总收入(元/年)'],axis=1)


读取SPSS数据

spss数据是.sav文件后缀,并且数据也有对应的标签

 spss数据也可以直接读取:

data1=pd.read_spss('数据1.0.sav').drop(columns=['VAR00001'])
data1

变量名称没问题,但是变量不是数值,是文本,spss里面可以显示数值,这个怎么处理呢?

用pyreadstat这个包

import pyreadstat
df, meta = pyreadstat.read_sav('数据1.0.sav')
df=df.drop(columns=['VAR00001'])
# 查看所有变量的标签
print(meta.variable_value_labels)
df.head()

 可以看到每个数值对应的中文含义都在这个文件里面。pyreadstat读取后就直接是数值型数据了。

spss里面很多999之类的数据是缺失值,所以可以这样处理:
 

# 将这些特定值替换为 NaN
missing_values = [98, 99, 9999996, 9999997, 9999998, 9999999]
df.replace(missing_values, np.nan, inplace=True)
df.shape

如果你想改变数据的含义,让他们数值映射为不同的含义,可以新自定义一个字典,写入spss数据,

new_mapping={'看电影': {5.0: '每天', 4.0: '一周数次', 3.0: '一月数次', 2.0: '一年数次或更少', 1.0: '从不'}, 
 '幸福感': {1.0: '非常不幸福', 2.0: '比较不幸福', 3.0: '说不上幸福不幸福', 4.0: '比较幸福', 5.0: '非常幸福', 98.0: '不知道', 99.0: '拒绝回答'},
 '社会交往': {1.0: '几乎每天', 2.0: '一周1到2次', 3.0: '一个月几次', 4.0: '大约一个月1次', 5.0: '一年几次', 6.0: '一年1次或更少', 7.0: '从来不', 98.0: '不知道', 99.0: '拒绝回答'},
 '性别': {1.0: '男', 2.0: '女'}, 
 '教育水平': {1.0: '没有受过任何教育', 2.0: '私塾、扫盲班', 3.0: '小学', 4.0: '初中', 5.0: '职业高中', 6.0: '普通高中', 7.0: '中专', 8.0: '技校', 9.0: '大学专科(成人高等教育)', 10.0: '大学专科(正规高等教育)', 11.0: '大学本科(成人高等教育)', 12.0: '大学本科(正规高等教育)', 13.0: '研究生及以上', 14.0: '其他(请注明)'},
 '健康状况': {1.0: '很不健康', 2.0: '比较不健康', 3.0: '一般', 4.0: '比较健康', 5.0: '很健康', 98.0: '不知道', 99.0: '拒绝回答'}, 
             '当前婚姻状况': {1.0: '未婚', 2.0: '已婚', 3.0: '离婚/丧偶'}, 
 '家庭年收入': {9999996.0: '收入高于百万位数', 9999997.0: '不适用', 9999998.0: '不知道', 9999999.0: '拒绝回答'}}
pyreadstat.write_sav(df, '洗好的data.sav', variable_value_labels=new_mapping)

 数据和对应的标签含义都写入了,很方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/430196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用红黑树封装实现map和set

map和set的实现原理 为了方便实现我们的map和set,我们肯定是要养成看源码的习惯的,看了源码之后你才会感受到大佬的强大! 在源码里面,对于map和set的实现,底层是用同一棵红黑树封装出来的,并不是用了两棵…

Spring基础——Bean定义的继承(Bean配置中的parent属性)

Bean的继承 当一个Bean中定义了很多配置信息,可以将一部分固定信息抽象成父Bean,子Bean从父Bean继承配置数据,并根据需要可以覆盖或添加其他数据,这样可以使开发变的更加高效。 父Bean的定义 父Bean所定义的配置属性子Bean必须…

JWT的是什么

session共享 什么是session共享 Session共享是指在分布式系统中,在多个服务器之间共享同一个用户的会话数据。在传统的Web应用中,用户的会话信息通常存储在服务器端的Session中,而每个用户的请求在同一个服务器上处理,因此可以轻…

智奇科技工业 Linux 屏更新开机logo

智奇科技工业 Linux 屏更新开机logo 简介制作logo.img文件1、转换格式得到logo.bmp2、使用Linux命令生成img文件 制作rootfs.img文件替换rootfs.img中的logo 生成update.img固件附件 简介 智奇科技的 Linux 屏刷开机logo必须刷img镜像文件,比较复杂。 制作logo.i…

深度学习-Pytorch实现经典AlexNet网络:山高我为峰

深度学习-Pytorch实现经典AlexNet网络之山高我为峰 深度学习中,经典网络引领一波又一波的技术革命,从LetNet到当前最火的GPT所用的Transformer,它们把AI技术不断推向高潮。2012年AlexNet大放异彩,它把深度学习技术引领第一个高峰…

AI论文速读 | 大语言模型作为城市居民——利用LLM智能体框架生成人类移动轨迹

题目:Large Language Models as Urban Residents: An LLM Agent Framework for Personal Mobility Generation 作者:Jiawei Wang (王家伟), Renhe Jiang(姜仁河), Chuang Yang(杨闯), Zengqing Wu&#xf…

JeeSite Vue3:前端开发的未来之路

JeeSite Vue3:前端开发的未来之路 随着技术的飞速发展,前端开发技术日新月异。在这个背景下,JeeSite Vue3 作为一个基于 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin 的前端框架,引起了广泛关注。它凭借其先进的技…

mapbox加载全球3D建筑

本案例使用Mapbox GL JavaScript库进行加载全球3D建筑。 文章目录 1. 引入 CDN 链接2. 创建地图3. 监听地图加载完成事件3.1. 获取地图的样式中的图层3.2. 查找图层3.3. 添加三维建筑图层 4. 演示效果5. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script sr…

C++模拟揭秘刘谦魔术,领略数学的魅力

新的一年又开始了&#xff0c;大家新年好呀~。在这我想问大家一个问题&#xff0c;有没有同学看了联欢晚会上刘谦的魔术呢&#xff1f; 这个节目还挺有意思的&#xff0c;它最出彩的不是魔术本身&#xff0c;而是小尼老师“念错咒语”而导致他手里的排没有拼在一起&#xff0c;…

Android studio 侧边栏看不到 Commit 标签,不能方便的查看本地ChangaeList

参考 如上图&#xff0c;一次升级后找不到commit 标签&#xff0c;造成不能很好的监测本地修改了那些文件&#xff0c;通过搜索找到显示的方法。&#xff0c;进入设置找红框位置&#xff0c;勾选复选款即可。 正常显示

Python实现CCI工具判断信号:股票技术分析的工具系列(5)

Python实现CCI工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;5&#xff09; 介绍算法解释 代码rolling函数介绍完整代码data代码CCI.py 介绍 在股票技术分析中&#xff0c;CCI (商品路径指标&#xff09;是一种常用的技术指标&#xff0c;用于衡量股价是否处于超…

JavaWeb Request:获取请求数据

Request是请求对象&#xff0c;Response是响应对象。 浏览器会发送HTTP请求到后台服务器[Tomcat]&#xff0c;请求中会包含很多请求数据 [请求行请求头请求体] &#xff0c;后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到Request对象&#xff0c;可以从Req…

Docker之数据卷

目录 一、什么是数据卷 二、自定义镜像 一、什么是数据卷 1.1Docker 数据管理 在生产环境中使用 Docker &#xff0c;往往需要对数据进行持久化&#xff0c;或者需要在多个容器之间进行 数据共享&#xff0c;这必然涉及容器的数据管理操作 二、操作 将宿主机的目录与容器的…

双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025

D2025 为立体声音频功率放大集成电路&#xff0c;适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点&#xff1a;  适用于立体声或 BTL 工作模式  外接元件少  通道分离性好  电源电压范围宽&#xff08;3V~12V &#xff…

深度学习GPU环境安装(WINDOWS安装NVIDIA)

1.检测是否支持GPU环境 1.1.打开设备管理器 winows下面搜索设备管理器&#xff08;或者从桌面"此电脑"——>右键点击——>"管理"打开&#xff09; 1.2.查看本地显卡 在"设备管理器"——"显示适配器"中&#xff0c;如果没有&…

瑞吉外卖项目详细分析笔记及所有功能补充代码

目录 项目刨析简介技术栈项目介绍项目源码 一.架构搭建1.初始化项目结构2.数据库表结构设计3.项目基本配置信息添加公共字段的自动填充全局异常处理类返回结果封装的实体类 二.管理端业务开发1.员工管理相关业务1.1员工登录1.2员工退出1.3过滤器拦截1.4员工信息修改1.5员工信息…

ElasticSearch之分片相关概念segment,merge,refresh等

写在前面 本文看下分片相关概念&#xff0c;segment&#xff0c;merge&#xff0c;refresh等。 1&#xff1a;segment&#xff0c;commit point&#xff0c;.del 一个倒排索引的文件称为segment&#xff0c;多个segment组合在一起就是lucene的index&#xff0c;也就是es的sh…

线程变量ThreadLocal用于解决多线程并发时访问共享变量的问题。

ThreadLocal介绍 ThreadLocal叫做线程变量&#xff0c;用于解决多线程并发时访问共享变量的问题。意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建…

12. Nginx进阶-Location

简介 Nginx的三大区块 在Nginx中主要配置包括三个区块&#xff0c;结构如下&#xff1a; http { #协议级别include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$r…
最新文章