Python与Stata在数据准备中



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

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

斯塔塔(原始数据(

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

检查是否缺失 (mdesc varname(

失踪: 10953 总计: 11563

缺失百分比: 94.72

斯塔塔(drop if varname < 1500后(:

瓦纳姆|OBS: 389平均值: 1350.599Std.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()varname 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[]子句中布尔运算的行为。

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

在您的示例中,df = df[df.varname<1500]将返回df.varname<1500True的内容。因此,您将获得满足df.varname<1500的行,而不是删除它们。

最新更新