从DataFrame提取值插入另一DataFrame的问题解决与原因分析
问题分析与解决
复现代码
import pandas as pd df1 = pd.DataFrame({'cola':[1,2,3], 'colb':['a','b','c']}) selected = df1[df1['cola'] == 1] tempDf = pd.DataFrame({'col1':[selected['cola']], 'col2': [10]})
现象
执行后tempDf的col1列显示为0 1 Name: cola, dtype: int64,而非预期的纯数值1,col2列正常显示10。
原因
selected['cola']返回的是一个Series对象(带索引、列名和数据类型的一维结构),当把它放在列表[selected['cola']]里传入DataFrame构造器时,Pandas会把整个Series当作单个元素存入单元格,而不是提取其中的数值。
修改方案
有三种常用方式提取纯数值:
- 用
.values[0]直接取Series的第一个值(因为筛选结果只有一行):
tempDf = pd.DataFrame({'col1':[selected['cola'].values[0]], 'col2': [10]})
- 用
.iloc[0]按位置取第一行的对应列值:
tempDf = pd.DataFrame({'col1':[selected['cola'].iloc[0]], 'col2': [10]})
- 直接在筛选时提取标量值,避免生成Series:
selected_val = df1.loc[df1['cola'] == 1, 'cola'].iloc[0] tempDf = pd.DataFrame({'col1':[selected_val], 'col2': [10]})
执行任意一种修改后,tempDf的col1列都会显示纯数值1,符合预期。
内容的提问来源于stack exchange,提问作者keenan
相关产品推荐
相关产品推荐

