Я понимаю, что это маловероятно, но я не могу понять, почему Python выводит немного другой набор данных после простых манипуляций, которые, как мне кажется, идентичны тем, что я делаю в Stata. Итак, Stata:
use "filename", clear
drop if varname < 1500
sum
STATA (необработанные данные)
Obs: 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
Тип: float
Между тем, 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
max: 1368.000000
df.isnull().sum()
varname 10953
Таким образом, количество пропусков в необработанных данных одинаково в Stata и Python, но после удаления Я получаю два разных набора данных.
PYTHON, после df = df[df.varname<1500]
##
Количество: 288,000000
Среднее значение: 1325,7603 76
Станд .: 13.369122
Мин .: 1304.000000
25%: 1316.000000
50%: 1325.000000
75%: 1332.000000
Макс: 1365.000000
В частности, различия в количестве наблюдений. Для некоторых переменных существует шаблонная разница, например, Stata: 11 342 наблюдений, Python: 5064 наблюдений (вдвое меньше). Для некоторых переменных разница не шаблонная, а просто разные значения. Итоговая статистика не слишком разная, но разная. Я новичок в Python, не могли бы вы поделиться, действительно ли это возможно, что он работает с данными иначе, чем Stata?
Правка:
Я понял, что уронил неправильно, вместо df = df[df.varname<1500]
надо было набрать df_new = df.drop(df[df.varname< 1500].index)
. Я не знаю разницы, но теперь у меня есть набор данных, который мне нужен. Спасибо всем за то, что провели здесь время!