查看原文
其他

软件应用 | Python+Stata:数据操作对比

数据Seminar 2022-12-31


来源:Pandas中文网

转载自公众号计量经济学服务中心

本节旨在演示如何在 pandas 中做各种类似Stata的操作。

按照惯例,我们按如下方式导入 pandas 和 NumPy:

import pandas as pd
import numpy as np

在Python教程中,DataFrame将通过调用显示pandas df.head(),它将显示该行的前N行(默认为5行)DataFrame。

这通常用于交互式工作(例如Jupyter笔记本或终端),而Stata中的等价物将是:list in 1/5

1、数据结构

一般术语对照表 

  • DataFrame/ Series pandas 中的 DataFrame 类似于 Stata 数据集-具有不同类型的标记列的二维数据源。如本文所示,几乎任何可以应用于Stata中的数据集的操作也可以在 pandas 中完成。

  • Series 是表示DataFrame的一列的数据结构。Stata 对于单个列没有单独的数据结构,但是通常,使用 Series 类似于引用Stata中的数据集的列。

  • Index每个 DataFrame 和 Series 在数据 行 上都有一个叫 Index-label 的标签。在 Stata 中没有相似的概念。

  • 在Stata中,数据集的行基本上是无标签的,除了可以用 _n 访问的隐式整数索引。在pandas中,如果未指定索引,则默认情况下也使用整数索引(第一行= 0,第二行= 1,依此类推)。虽然使用标记Index或 MultiIndex可以启用复杂的分析,并且最终是 pandas 理解的重要部分,但是对于这种比较,我们基本上会忽略它, Index并且只是将其DataFrame视为列的集合。

2、数据输入/输出

从价值观构建数据帧

通过将数据放在input语句之后并指定列名,可以从指定值构建Stata数据集。

input x y
1 2
3 4
5 6
end

pandas 的 DataFrame 可以用许多不同的方式构建,但对于少量的值,通常可以方便地将其指定为Python字典,其中键是列名,值是数据。

3、读取外部数据

与Stata一样,pandas提供了从多种格式读取数据的实用程序。

Stata提供将csv数据读入内存中的数据集。如果文件在当前工作目录中,我们可以按如下方式导入它。import delimited````tips.csv

import delimited tips.csv

pandas 方法是read_csv()类似的。此外,如果提供了网址,它将自动下载数据集。

比如,可以使用许多参数来指定数据应该如何解析。例如,如果数据是由制表符分隔的,没有列名,并且存在于当前工作目录中,则pandas命令将为:import delimitedread_csv()

tips = pd.read_csv('tips.csv', sep='\t', header=None)
# alternatively, read_table is an alias to read_csv with tab delimiter
tips = pd.read_table('tips.csv', header=None)

pandas 还可以用于 .dta 的文件格式中。使用read_stata()函数读取格式的Stata数据集。

df = pd.read_stata('data.dta')

除了text / csv和Stata文件之外,pandas还支持各种其他数据格式,如Excel,SAS,HDF5,Parquet和SQL数据库。这些都是通过pd.read_* 函数读取的。

4、导出数据

stata 中 import delimated 的反向操作是 export delimated。

export delimited tips2.csv

类似地,在 pandas 中,read_csv 的反向操作是DataFrame.to_csv()

tips.to_csv('tips2.csv')

pandas 还可以使用DataFrame.to_stata()方法导出为Stata文件格式。

tips.to_stata('tips2.dta')

5、数据操作

  • 列上的操作
  • 在Stata中,任意数学表达式可以与新列或现有列上的generate和 replace命令一起使用。该drop命令从数据集中删除列。
replace total_bill = total_bill - 2
generate new_bill = total_bill / 2
drop new_bill
  • pandas 通过指定个体提供了类似的矢量化操作Series中DataFrame。可以以相同的方式分配新列。该DataFrame.drop()方法从中删除一列DataFrame。

  • 过滤

在Stata中过滤是通过 if 一个或多个列上的子句完成的。

list if total_bill > 10

DataFrame可以通过多种方式进行过滤; 最直观的是使用 布尔索引

tips[tips['total_bill'] > 10].head()

  • 如果/那么逻辑

在Stata中,if子句也可用于创建新列。

generate bucket = "low" if total_bill < 10
replace bucket = "high" if total_bill >= 10

使用 numpy 的 where 方法可以在 pandas 中完成相同的操作。

tips['bucket'] = np.where(tips['total_bill'] < 10, 'low''high')
tips.head()

Out: 
   total_bill   tip     sex smoker  day    time  size bucket
0       14.99  1.01  Female     No  Sun  Dinner     2   high
1        8.34  1.66    Male     No  Sun  Dinner     3    low
2       19.01  3.50    Male     No  Sun  Dinner     3   high
3       21.68  3.31    Male     No  Sun  Dinner     2   high
4       22.59  3.61  Female     No  Sun  Dinner     4   high

列的选择

Stata 提供了选择,删除和重命名列的关键字。

keep sex total_bill tip
drop sex
rename total_bill total_bill_2

按值排序

Stata中的排序是通过 sort

sort sex total_bill

pandas 对象有一个DataFrame.sort_values()方法,它采用列表进行排序。

tips = tips.sort_values(['sex''total_bill'])
tips.head()

     total_bill   tip     sex smoker   day    time  size
67         1.07  1.00  Female    Yes   Sat  Dinner     1
92         3.75  1.00  Female    Yes   Fri  Dinner     2
111        5.25  1.00  Female     No   Sat  Dinner     1
145        6.35  1.50  Female     No  Thur   Lunch     2
135        6.51  1.25  Female     No  Thur   Lunch     2









星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧


往期推荐


软件应用 | 收藏!20条非常实用的Python代码实例

软件应用 | SQL、Pandas和Spark:如何实现数据透视表?

推荐 | Science综述:计算社会科学十年,反思与展望

推荐 | 超全!最常用的70个数据分析网址,值得收藏!

软件应用 | 高清PDF版!Stata 与 R 的 cheat sheets

机器学习 | 吴恩达:28张图全解深度学习知识

统计计量 | 回归分析中15个统计量解释







数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


推荐 | 青酱

    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存