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

news2024/10/6 4:12:33

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.coloradmin.cn/o/1490715.html

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

相关文章

如何解决iQOO手机运行uniapp真机调试时无法识别的问题

打开开发者选项,打开USB设置,把默认USB选项改成MIDI模式,就可以检测到手机了

Golang高级微调技术

本文分享了一些小技巧,可以帮助我们写出更简化、高效的Golang代码,从而获得更好的开发体验。原文: Fine-Tuning Golang: Advanced Techniques for Code Optimization 本文是Golang代码优化技术的综合指南,帮助我们释放 Golang 应用程序的全部…

微信小程序(五十)请求拦截器实现携token获取用户信息

注释很详细,直接上代码 上一篇 新增内容: 1.个人信息框基本样式 2.请求拦截器携token获取个人信息进行渲染 源码: utils/http.js import http from "wechat-http"//设置全局默认请求地址 http.baseURL "https://live-api.it…

Mybatis_plus-基础

一、简介 1.概述 文档地址:https://baomidou.com/ 概述:MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网,用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

RISCV 中断控制器 PLIC APLIC (非MSI部分)

以下包含了 PLIC & APLIC 着重解释 APLIC 部分 参考 github 中 riscv-aia 规范1.0 ,第四章 APLIC 注:关于MSI的部分简略(等后续搞清楚) 本人处于学习阶段,不清晰的地方,请见谅 一、关于 PLIC 配置 1、…

【Python】-----基础知识

注释 定义:让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息,在Python中单引号与双引号没有区别,但必须是成对出现 输出与输入 程序是有开始,有结束的,程序运行规则:从上而下,由内…

(1)预处理

我们需要的文件结构如上 main.cpp add.h add.cpp add.h 这里使用riscv的工具链编译为.i文件,需要使用-E,就是只进行预处理,我们可以得到两个.i文件即main.i和add.i main.i 这里看到main.i里头文件全部替换,然后多了三万多行 所以…

力扣经典题目解析--合并两个有序链表

原题地址: . - 力扣(LeetCode) 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 迭代 链表节点结构…

Day12-【Java SE进阶】JDK8新特性:Lambda表达式、方法引用、常见算法、正则表达式、异常

一、JDK8新特性 1.Lambda表达式 Lambda表达式是JDK 8开始新增的一种语法形式;作用:用于简化名内部类的代码写法。 注意:Lambda表达式并不是说能简化全部匿名内部类的写法,只能简化函数式接口的匿名内部类。 有且仅有一个抽象方法的接口。注意:将来我们见到的大部…

【音视频开发好书推荐】《RTC程序设计:实时音视频权威指南》

1、WebRTC概述 WebRTC(Web Real-Time Communication)是一个由Google发起的实时音视频通讯C开源库,其提供了音视频采集、编码、网络传输,解码显示等一整套音视频解决方案,我们可以通过该开源库快速地构建出一个音视频通…

【前端寻宝之路】总结学习使用CSS的引入方式

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-BNJBIEvpN0GHNeJ1 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

C语言第三十五弹---文件操作(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 文件操作 1、为什么使用文件? 2、什么是文件? 2.1、程序文件 2.2、数据文件 2.3、文件名 3、二进制文件和文本文件 4、文件的打开和…

集成算法(随机森林,AdaBoost,Xgboost,Stacking模型)

目录 一、前言 二、Bagging模型 三、Boosting模型 四、Stacking模型 五、总结 一、前言 集成算法(Enseamable learning) 集成算法一般考虑树模型,KNN就不太适合 目的:让机器学习效果更好,单个不好,一起…

性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI,因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测,则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明,我们看不见它&#xf…

BUUCTF------[HCTF 2018]WarmUp

开局一个表情&#xff0c;源代码发现source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php"];if (! isset($page) |…

关于图形学中生成三角形库Triangle.Net的下载及简单使用

背景 Triangle.NET 是生成 2D&#xff08;约束&#xff09;Delaunay 三角剖分和点集或平面直线图的高质量网格。此库是基于 Jonathan Richard Shewchuk 的 Triangle 项目&#xff0c;主要用于图形学像Opengl(或Unity3D)中生成三角形使用。 下载 Triangle.Net是基于C#语言的库…

倾斜三维模型OSGB路径漫游——DasViewer

背景 有时候我们需要查看倾斜三维模型效果的效果&#xff0c;虽然也有很多软件可以用&#xff0c;比如CC、超图等等&#xff0c;但是这些软件都比较大&#xff0c;安装也比较麻烦&#xff0c;DasViewer这个软件就比较轻量&#xff0c;安装也简单&#xff0c;功能强大&#xff…

网络信息安全:nginx漏洞收集(升级至最新版本)

网络&信息安全&#xff1a;nginx漏洞收集&#xff08;升级至最新版本&#xff09; 一、风险详情1.1 nginx 越界写入漏洞(CVE-2022-41742)1.2 nginx 缓冲区错误漏洞(CVE-2022-41741)1.3 nginx 拒绝服务漏洞&#xff08;CNVD-2018-22806&#xff09; 二、nginx升级步骤 &…

使用GRU进行天气变化的时间序列预测

本文基于最适合入门的100个深度学习项目的学习记录&#xff0c;同时在Google clolab上面是实现&#xff0c;文末有资源连接 天气变化的时间序列的难点 天气变化的时间序列预测涉及到了一系列复杂的挑战&#xff0c;主要是因为天气系统的高度动态性和非线性特征。以下是几个主…