python 中字典中的变量

variables in dictionaries in python

我正在尝试使用字典创建 DataFrame,我在其中添加了变量作为值。

gpa_min = df_gpa.min()
gpa_Q1 = df_gpa.quantile(0.25)
ratio_gpa = 'gpa ratio Q1/outlier is ', df_gpa.quantile(0.25)/df_gpa.min(), 'should be'
gre_min = df_gre.min()
gre_Q1 = df_gre.quantile(0.25)   
ratio_gre = 'gre ratio Q1/outlier is ', df_gre.quantile(0.25)/df_gre.min()

index = ['gre','gpa']
columns = ['min','Q1','Q1/min']


outlier = pd.DataFrame({"gre": [gre_min,gre_Q1,ratio_gre],
                        "gpa": [gpa_min,gpa_Q1,ratio_gpa]},
                       index = index, columns = columns)
print outlier

这运行没有错误,但答案是只有'Nan'值的数据框......这非常令人困惑,就好像我只是调用上面创建的变量('gre_min, gre_Q1, ratio_gre, gpa_min, gpa_Q1, ratio_gpa')我得到了值正确

我正在使用 Python 2.7

谢谢!

以这种方式构建 pandas DataFrame 将假定您传入的字典是数据框的 的字典...但是您随后对 indexcolumns 的定义与此不一致。 Pandas 然后尝试变得聪明,基本上 'interpolates' 您提供的数据 indices/columns。除了因为它有 none(你的 'data' 列和 'textual' 列完全不相关:在我下面的例子中,它试图获取列 xyz 来自 gregpa 列),它只是吐出 NaNs

In[70]: pd.DataFrame({'gre': [1,2,3], 'gpa': ['a', 'b', 'c']}, index=['gre', 'gpa'], 
         columns=['x', 'y', 'z'])
Out[70]: 
       x    y    z
gre  NaN  NaN  NaN
gpa  NaN  NaN  NaN

翻转你的 rows/columns 得到你想要的:

In[71]: pd.DataFrame({'gre': [1,2,3], 'gpa': ['a', 'b', 'c']}, columns=['gre', 'gpa'], 
         index=['x', 'y', 'z'])
Out[71]: 
   gre gpa
x    1   a
y    2   b
z    3   c

或者更简单,让它从字典键中推断列名:

In[72]: pd.DataFrame({'gre': [1,2,3], 'gpa': ['a', 'b', 'c']}, index=['x', 'y', 'z'])
Out[72]: 
  gpa  gre
x   a    1
y   b    2
z   c    3