【发布时间】:2020-05-25 13:28:17
【问题描述】:
我知道这不太可能,但我不明白为什么 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 Min: 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)。我不知道有什么区别,但现在我有了我需要的数据集。感谢大家花时间在这里!
【问题讨论】:
-
老实说,这似乎不太可能。您能否直接在读取数据后和删除后提供
varname的类型和描述性统计信息?我的猜测是 null 值的处理方式不同。 -
您能否在删除任何观察之前包括计数以验证正在读取的数据是否相同?另外,你能明确检查缺失值吗?
-
df = df[df.varname>1500] ...?
-
@coffeinjunky,看起来数据集是相同的,但是在我使用 df = df[df.varname
-
@tianlinhe,是的,在这个命令之后我得到一个与 stata 不同的数据集,所以这可能是一个不正确的行