添加新列后,Pandas df.describe不起作用

时间:2017-09-06 05:56:59

标签: python pandas dataframe

我有一个包含118列的Pandas数据框,我想添加一个新列' x119'。 我尝试使用各种方法,似乎都像:

df = df.assign(x119=F))

或:

df.loc[:,'x119'] = F

这些方法似乎将列添加到df数据帧,但是当我使用时:

df.describe()

我仍然得到118列。有谁遇到过这种情况?调用df['x119']时,该列似乎存在但未在df.describe()的说明中显示。

编辑:F的值是分类的,数值为1,2,3。在{d}之前和当我使用'x119'然后df2=df时,df2.decribe()列不存在,它可以正常工作,我可以查看所有列。

2 个答案:

答案 0 :(得分:1)

我认为问题应该是x119列之前的df,所以只能覆盖值。

您可以通过以下方式查看:

print (df['x119'])

最简单的添加新列是:

print (len(df.columns))
df['x119'] = F
print (len(df.columns))

答案 1 :(得分:1)

案例1:所有数据类型都是数字:

{p> df.describe()df.assign(..)之后适用于数值数据类型,这是一个可重复的示例:

>>> df = pd.DataFrame([[1,2],[3,4]], columns=list('AB'))
>>> df
   A  B
0  1  2
1  3  4
>>> import numpy as np 
>>> df["C"] = np.nan 
>>> df
   A  B   C
0  1  2 NaN
1  3  4 NaN
>>> df.describe()
              A         B    C
count  2.000000  2.000000  0.0
mean   2.000000  3.000000  NaN
std    1.414214  1.414214  NaN
min    1.000000  2.000000  NaN
25%    1.500000  2.500000  NaN
50%    2.000000  3.000000  NaN
75%    2.500000  3.500000  NaN
max    3.000000  4.000000  NaN
>>> df.assign(D=5)
   A  B   C  D
0  1  2 NaN  5
1  3  4 NaN  5
>>> df.describe()
              A         B    C
count  2.000000  2.000000  0.0
mean   2.000000  3.000000  NaN
std    1.414214  1.414214  NaN
min    1.000000  2.000000  NaN
25%    1.500000  2.500000  NaN
50%    2.000000  3.000000  NaN
75%    2.500000  3.500000  NaN
max    3.000000  4.000000  NaN
>>> df  = df.assign(D=5)
>>> df.describe()
              A         B    C    D
count  2.000000  2.000000  0.0  2.0
mean   2.000000  3.000000  NaN  5.0
std    1.414214  1.414214  NaN  0.0
min    1.000000  2.000000  NaN  5.0
25%    1.500000  2.500000  NaN  5.0
50%    2.000000  3.000000  NaN  5.0
75%    2.500000  3.500000  NaN  5.0
max    3.000000  4.000000  NaN  5.0
>>> 
  • 确保将df.assign的结果分配回df,如df = df.assign(...)

案例2:混合数字和对象数据类型:

对于混合对象和数值数据类型,您需要执行文档here Notes 部分中提到的df.describe(include='all')

  

对于通过DataFrame提供的混合数据类型,默认值为   仅返回数值列的分析。如果包含='全部'是   作为选项提供,结果将包括属性的并集   每种类型。

>>> df["E"] = ['1','2']
>>> df
   A  B   C  D  E
0  1  2 NaN  5  1
1  3  4 NaN  5  2
>>> df.describe()
              A         B    C    D
count  2.000000  2.000000  0.0  2.0
mean   2.000000  3.000000  NaN  5.0
std    1.414214  1.414214  NaN  0.0
min    1.000000  2.000000  NaN  5.0
25%    1.500000  2.500000  NaN  5.0
50%    2.000000  3.000000  NaN  5.0
75%    2.500000  3.500000  NaN  5.0
max    3.000000  4.000000  NaN  5.0
>>> df
   A  B   C  D  E
0  1  2 NaN  5  1
1  3  4 NaN  5  2
>>> 

所以你需要按如下方式调用describe:

>>> df.describe(include='all')
               A         B    C    D    E
count   2.000000  2.000000  0.0  2.0    2
unique       NaN       NaN  NaN  NaN    2
top          NaN       NaN  NaN  NaN    2
freq         NaN       NaN  NaN  NaN    1
mean    2.000000  3.000000  NaN  5.0  NaN
std     1.414214  1.414214  NaN  0.0  NaN
min     1.000000  2.000000  NaN  5.0  NaN
25%     1.500000  2.500000  NaN  5.0  NaN
50%     2.000000  3.000000  NaN  5.0  NaN
75%     2.500000  3.500000  NaN  5.0  NaN
max     3.000000  4.000000  NaN  5.0  NaN
>>>