Python vs Stata 的数据准备

Python vs Stata in data preparation

我知道这不太可能,但我不明白为什么 Python 在简单操作后输出略有不同的数据集,我认为这与我在 Stata 中所做的相同。 所以,Stata:

use "filename", clear  
drop if varname < 1500  
sum  

STATA(原始数据)

观测值:610
平均值:1339.482
标准:17.27477
最小值:1304
最大值:1368

正在检查是否遗漏 (mdesc varname)

失踪:10953
总计:11563
缺失百分比:94.72

STATA(在drop if varname < 1500之后):

varname |obs: 389 mean: 1350.599 Std.Dev.: 9.564949 最小值: 1333 最大值: 1368
类型:浮动

同时,Python:

import pandas as pd  
df = pd.read_stata("filename.dta", convert_missing = False)  
df = df[df.varname<1500]  
df.describe()  

PYTHON(原始数据:df=pd.read_stata("filename.dta"):varname
计数:610
均值:1339.481934
标准:17.274755
最小值:1304.000000
25%:1326.000000
50%:1341.000000
75%:1353.000000
最大值:1368.000000

df.isnull().sum()
变量名 10953
所以 Stata 和 Python 中原始数据中缺失的数量相同,但删除后我得到两个不同的数据集。

PYTHON,在df = df[df.varname<1500]##

之后

计数:288.000000
均值:1325.760376
标准:13.369122
最小值:1304.000000
25%:1316.000000
50%:1325.000000
75%:1332.000000
最大值:1365.000000

具体而言,差异在于观察次数。对于某些变量,存在模式差异,即 Stata:11 342 obs,Python:5064 obs(少两倍)。对于某些变量,差异不是模式化的,只是不同的值。汇总统计并没有太大的不同,而是不同。 我是 Python 的新手,如果它确实有可能以不同于 Stata 的方式处理数据,请您分享一下?

编辑:

我发现我输错了,而不是 df = df[df.varname<1500],我应该输入 df_new = df.drop(df[df.varname< 1500].index)。我不知道有什么区别,但现在我有了我需要的数据集。感谢大家的光临!

我猜你误解了 df[] 子句中布尔运算的行为。

在pandas中,df[statement]里面的语句必须是True,这样才能被选中。

在您的示例中,df = df[df.varname<1500] 将 returns df.varname<1500True。所以你会得到那些满足 df.varname<1500 的行,而不是丢弃它们。