Python 在向数据帧添加索引时,我的数字去了哪里?
当我将索引添加到数据帧时,我的整数变成了NaN 我运行以下命令:Python 在向数据帧添加索引时,我的数字去了哪里?,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,当我将索引添加到数据帧时,我的整数变成了NaN 我运行以下命令: newRows = {'guavas': [10, 20], 'pears': [111,222], 'avocados':[200,3000]} newDF = pd.DataFrame(newRows) print (newDF) newDF = pd.DataFrame(newDF, index=['Thriftway', 'Meijer']) newDF.index.n
newRows = {'guavas': [10, 20],
'pears': [111,222],
'avocados':[200,3000]}
newDF = pd.DataFrame(newRows)
print (newDF)
newDF = pd.DataFrame(newDF, index=['Thriftway', 'Meijer'])
newDF.index.name = 'Store'
print(newDF)
我明白了:
guavas pears avocados
0 10 111 200
1 20 222 3000
guavas pears avocados
Store
Thriftway NaN NaN NaN
Meijer NaN NaN NaN
“旧的”newDF
有索引[0,1]
,“新的”newDF
有索引['Thriftway','Meijer']
。当对数据帧使用DataFrame
-构造函数时,即pd.DataFrame(newDF,index=['Thriftway',Meijer'])
,pandas在内部对newDF
索引上的index参数中的列表进行重新索引
在数据框中没有相应记录的新索引中的值被分配NaN
。索引[0,1]
和索引['Thriftway',Meijer']
没有重叠值,因此结果是一个数据帧,其中NaN
作为值
要了解这一点,请尝试运行以下命令:
将熊猫作为pd导入
新行={'guavas':[10,20],
‘梨’:[111222],
‘鳄梨’:[2003000]}
newDF=pd.DataFrame(新行)
打印(newDF)
newDF=pd.DataFrame(newDF,index=['Thriftway','Meijer',0,1])
newDF.index.name='Store'
打印(newDF)
请注意,新数据框现在包含旧数据。要实现您想要的,您可以使用新索引替换现有数据帧,如下所示:
将熊猫作为pd导入
新行={'guavas':[10,20],
‘梨’:[111222],
‘鳄梨’:[2003000]}
newDF=pd.DataFrame(新行)
打印(newDF)
newDF=newDF.reindex(['Thriftway','Meijer']))
newDF.index.name='Store'
您甚至可以通过使用reindex
的index
-参数来重现熊猫在内部所做的事情:
newDF.reindex(索引=['Thriftway','Meijer']
结果是,与之前一样,一个数据帧,其中以前不在该数据帧中的标签被指定为NaN:
guavas pears avocados
Thriftway NaN NaN NaN
Meijer NaN NaN NaN
newDF=pd.DataFrame(newDF,index=['Thriftway','Meijer']))
在上行中,您将数据帧和索引都传递给pd.dataframe()
假设data
是一个数据帧,我从中选择一些相关代码如下:
def\uu init__(
自己
数据=无,
索引:可选[轴]=无,
列:可选[轴]=无,
dtype:可选[dtype]=无,
复制:bool=False,
):
如果isinstance(数据、块管理器):
如果索引为None,列为None,数据类型为None,副本为False:
#GH#33357快速通道
NDFrame.\uuuu init\uuuu(自,数据)
返回
经理=自我。\u初始\u经理(
数据,轴={“索引”:索引,“列”:列},dtype=dtype,copy=copy
)
- 如果给定了
,index
将创建一个与传递的数据帧具有相同列的数据帧。每个单元格都填充有pandas.DataFrame()
NaN
- 如果未给出
,它将创建一个与传递的数据帧相同的数据帧,包括索引、列和数据索引
newDF = pd.DataFrame(newDF, index=['Thriftway', 'Meijer'])
这实际上将根据newDF中给定的索引(['Thriftway','Meijer'])设置您的newDF。由于(目前)在newDF中没有这两个索引值的任何值,它会将这些索引值的列值写为NaN
设置自定义索引的两种可能的解决方案如下:
newRows = {'guavas': [10, 20],
'pears': [111,222],
'avocados':[200,3000]}
newDF = pd.DataFrame(newRows, index=['Thriftway', 'Meijer'])
newDF.index.name = 'Store'
print(newDF)
newRows = {'guavas': [10, 20],
'pears': [111,222],
'avocados':[200,3000]}
newDF = pd.DataFrame(newRows)
newDF = newDF.set_index(pd.Index(['Thriftway', 'Meijer']))
newDF.index.name = 'Store'
print(newDF)