Python 熊猫df.x27;添加新列后无法工作
我有一个包含118列的熊猫数据框,我想添加一个新列“x119”。 我尝试了各种各样的方法,似乎都是这样:Python 熊猫df.x27;添加新列后无法工作,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含118列的熊猫数据框,我想添加一个新列“x119”。 我尝试了各种各样的方法,似乎都是这样: df = df.assign(x119=F)) 或: 这些方法似乎将列添加到dfdataframe中,但当我使用: df.describe() 我仍然有118列。有人遇到过这种情况吗?调用df['x119']时,该列似乎存在,但在df.descripe()的说明中未显示 编辑:F的值是分类的,数值为1,2,3。当我使用df2=df然后使用df2.decribe()时,df中不存在列'x1
df = df.assign(x119=F))
或:
这些方法似乎将列添加到df
dataframe中,但当我使用:
df.describe()
我仍然有118列。有人遇到过这种情况吗?调用df['x119']
时,该列似乎存在,但在df.descripe()
的说明中未显示
编辑:F的值是分类的,数值为1,2,3。当我使用
df2=df
然后使用df2.decribe()
时,df中不存在列'x119'
,它工作正常,我可以看到所有列。我认为问题应该是x119
列以前在df中,所以只覆盖值
您可以通过以下方式进行检查:
print (df['x119'])
添加新列最简单的方法是:
print (len(df.columns))
df['x119'] = F
print (len(df.columns))
案例1:所有数据类型都是数字:
df.descripe()
在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:混合数字和对象数据类型: 对于混合对象和数字数据类型,需要执行文档中的Notes部分中提到的
df.description(include='all')
:
对于通过数据帧提供的混合数据类型,默认值为
仅返回数字列的分析。如果include='all'是
作为选项提供,结果将包括属性的并集
每种类型的
因此,您需要进行如下描述:
>>> 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
>>>
它是带有数字标签的分类数据:1、2、3实际上它不是空的。如果我使用:df2=df,然后执行df2.decribe(),效果很好,谢谢!解决方案是include='all',其中也包括分类数字数据@是的,就是这样:)谢谢你的回答,刚刚编辑了我的帖子来澄清。好的,如果检查专栏的长度,它们总是一样的吗?完全按照你的建议尝试。分别得117分和118分。这太奇怪了:/And
print(len(df.columns))
前后是一样的吗?我没有对分类数据使用include='all'。谢谢你抽出时间!
>>> 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
>>>
>>> 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
>>>