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.mzph.cn/news/721272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--机器人的运动范围

目录 1. 题目 2. 思路 3. C代码测试 4. 测试结果 1. 题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格…

echarts折线图、面积图的重叠与堆叠的区别

问题:在使用echarts折线图和面积图时,需求上要求必须重叠或者堆叠,如何进行配置解决过程:当两条折线或者是两个部分的面积进行区分重叠或堆叠时 1.在外观上不同的是,重叠图是允许两者有交点重叠部分&a…

如何应对IT服务交付中的问题?

如何应对IT服务交付中的问题? 按需交付服务的挑战IT服务体系的复杂性恶性循环的形成学会洞察的重要性书籍简介参与方式 按需交付服务的挑战 一致性、可靠性、安全性、隐私性和成本效益的平衡:成功的按需交付服务需要满足这些要求,这需要服务…

html样式排版

<template><div class"box"><div class"header">头部</div><div class"main"><div class"left">菜单</div><div class"right"><div class"right-contentr"&g…

【C++】list模拟实现+反向迭代器

list模拟实现 list定义list用法list iterator的使用begin() end()rbegin()rend() reverse()sort()merge()unique()remove()splice() list模拟实现struct和class的区别list三个类模板默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数 数据修改操作push_back()push_fron…

正信法律:借了钱找不到人怎么办

当一个人借出钱财之后&#xff0c;发现借款人像蒸发了一般无影无踪&#xff0c;这无疑是一件让人头疼的事情。面对这种情况&#xff0c;我们需要采取明智的措施来保护自己的权益。 尽量联络借款人。可以通过电话、短信、电子邮件或社交媒体尝试联系&#xff0c;同时也可以询问共…

界面控件DevExpress WinForms 2024产品路线图预览(一)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

excel数值无法左对齐

右键&#xff0c;单元格格式 修改为常规 解决

【力扣精选算法100道】——判定是否互为字符重排(哈希专题)

目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 第一种&#xff1a;排序 第二种方法&#xff1a;哈希 &#x1f6a9;实现代码 面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; &#x1f6a9;了解题意 我们输入俩个字符串&#xff0c;当俩…

张雨霏同款食谱火了,冠军的健康饮食秘密被发现了

2024新一届奥运年到来之际&#xff0c;厨电集成灶领军品牌的森歌突然爆出要“让全民吃到‘冠军’餐”&#xff0c;一时让业界震惊&#xff0c;也让有集成灶消费欲求的消费者感到惊喜。 森歌集成灶的这个“豪言壮语”是来源于森歌联合国家体育总局训练局共同启动的“2024森歌冠…

jquery 后台返回的单选框按照两列展示

jquery代码 <!DOCTYPE html> <html><head><!-- <meta charset"GBK"> --><meta charset"UTF-8"><title></title></head><form><body><table id"myTable"> <tbody …

代码随想录算法训练营Day37 | LeetCode738.单调递增的数字、LeetCode968.监控二叉树、贪心算法总结

LeetCode738.单调递增的数字 思路&#xff1a;与分糖果的题目同理&#xff0c;因为需要与前一位数比较&#xff0c;并且修改这两个数&#xff0c;因此需要从后往前遍历&#xff0c;当前一位数比当前数大时&#xff0c;则前一个数-1&#xff0c;后一个数变为9。 代码细节&…

【C++从0到王者】第四十七站:最小生成树

文章目录 一、最小生成树的概念1.概念2.最小生成树的构造方法 二、Kruskal算法1.算法思想2.代码实现 三、Prim算法1.算法思想2.代码实现3.试试所有节点为起始点 一、最小生成树的概念 1.概念 连通图&#xff1a;在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则…

设计模式:工厂模式 ⑤

一、思想 工厂模式&#xff1a;一个中介作用&#xff0c;在创建对象的时候。 主要作用&#xff1a;屏蔽对象创建过程&#xff0c;减少上层关注度&#xff0c;解耦并且内部方法可做更多扩展增强的处理。(比如使用映射消除if代码&#xff0c;存在多个同类对象需要抽象策略处理的时…

蓝桥杯练习系统(算法训练)ALGO-988 逗志芃的危机

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人&#xff0c;相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏…

Android 解决重复引用的多个场景

1.同个依赖不同版本 解决方法&#xff1a; resolutionStrategy.eachDependency { details -> if (details.requested.group com.android.support && !details.requested.name.contains(multidex)) { details.us…

express+mysql+vue,从零搭建一个商城管理系统8--文件上传,大文件分片上传

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装multer&#xff0c;fs-extra二、新建config/upload.js三、新建routes/upload.js四、修改routes下的index.js五、修改index.js六、新建上传文件test.html七、开启jwt验证token&#xff0c;通过login接…

基于SpringBoot的医护人员排班系统详细开题报告(源码)

项目源码&#xff1a;https://gitee.com/oklongmm/biye2​ 引言 医护人员排班系统是医疗机构中的重点管理工作之一。借助现代化的计算机技术&#xff0c;可以大大提升排班的效率和精准度。因此&#xff0c;本研究旨在使用SpringBoot框架设计和实现一个功能完善的医护人员排班…

Centos下安装Redis6.X

1. 检查gcc的版本 gcc --version 如果提示找不到gcc程序,说明没有安装&#xff0c;可以用dnf命令安装&#xff1a; dnf install gcc 准备好gcc&#xff0c;可接下来进行下载安装。 2. 下载Redis6并解压缩 wget http://download.redis.io/releases/redis-6.0.1.tar.gz 下载后…

前端常用数据结构

前端常用数据结构 前端常用数据结构数据结构数组栈队列链表单向链表双向链表树前端常用数据结构 什么是数据结构常用的数据结构 JavaScript 如何实现这些数据结构实际场景数据结构 所谓数据结构,是在计算机中组织、管理和存储数据的一种方式。 🙋:你知道哪些数据结构? …