考虑此 zip file 后面的 .dta
文件.
这是第一行:
>>> df = pd.read_stata('cepr_org_2014.dta', convert_categoricals = False)
>>> df.iloc[0]
year 2014
month 1
minsamp 8
hhid 000936071123039
hhid2 91001
# [...]
>>> df.iloc[0]['wage4']
nan
我使用stata
仔细检查了这一点,它看起来是正确的。到目前为止,一切都很好。现在我设置了一些我想保留的列并重做练习。
>>> columns = ['wbho', 'age', 'female', 'wage4', 'ind_nber']
columns2 = ['year', 'month', 'minsamp', 'hhid', 'hhid2', 'fnlwgt']
>>> df = pd.read_stata('cepr_org_2014.dta',
convert_categoricals = False,
columns=columns+columns2)
>>> df.iloc[0]
wbho 1
age 65
female 0
wage4 1.7014118346e+38
ind_nber 101
year 2014
month 1
minsamp 8
hhid NaN
hhid2 NaN
fnlwgt 560.1073
Name: 0, dtype: object
添加要保留的列列表后,pandas
- 不再理解缺失值,
wage4
很大,而不是NaN
。 - 为
hhid
和hhid2
创建缺失值。
为什么?
脚注:首先加载数据集,然后使用 df[columns+columns2]
进行过滤。
最佳答案
我将此错误追溯到 pandas 中的一个错误。我已修复 https://github.com/jbuyl/pandas/tree/fix-column-dtype-mixing 中的错误并打开了一个拉取请求来合并修复程序,但请随意查看我的分支/分支。
以下是运行示例的结果:
>>> columns = ['wbho', 'age', 'female', 'wage4', 'ind_nber']
>>> columns2 = ['year', 'month', 'minsamp', 'hhid', 'hhid2', 'fnlwgt']
>>> df = pd.read_stata('cepr_org_2014.dta',
... convert_categoricals = False,
... columns=columns+columns2)
>>> df.iloc[0]
wbho 1
age 65
female 0
wage4 nan
ind_nber NaN
year 2014
month 1
minsamp 8
hhid 000936071123039
hhid2 91001
fnlwgt 560.107
Name: 0, dtype: object
关于python - Pandas:向过滤器添加列会扰乱数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31783392/