分享

Python与Stata在数据处理区别

 liyu_sun 2020-05-19

来源:Pandas中文网

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

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

# 计量经济学服务中心import pandas as pdimport 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 y1 23 45 6end

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 delimitertips = 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 - 2generate new_bill = total_bill / 2drop new_bill

pandas 通过指定个体提供了类似的矢量化操作SeriesDataFrame。可以以相同的方式分配新列。该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 < 10replace 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 bucket0 14.99 1.01 Female No Sun Dinner 2 high1 8.34 1.66 Male No Sun Dinner 3 low2 19.01 3.50 Male No Sun Dinner 3 high3 21.68 3.31 Male No Sun Dinner 2 high4 22.59 3.61 Female No Sun Dinner 4 high

列的选择

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

keep sex total_bill tipdrop sexrename 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 size67 1.07 1.00 Female Yes Sat Dinner 192 3.75 1.00 Female Yes Fri Dinner 2111 5.25 1.00 Female No Sat Dinner 1145 6.35 1.50 Female No Thur Lunch 2135 6.51 1.25 Female No Thur Lunch 2

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多