Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在向数据帧添加索引时,我的数字去了哪里?_Python_Pandas_Jupyter Notebook - Fatal编程技术网

Python 在向数据帧添加索引时,我的数字去了哪里?

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

当我将索引添加到数据帧时,我的整数变成了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.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
  • 如果未给出
    索引
    ,它将创建一个与传递的数据帧相同的数据帧,包括索引、列和数据

据我所知,您希望将数据帧中的索引设置为0,1以外的值。但是,

newDF = pd.DataFrame(newDF, index=['Thriftway', 'Meijer'])
这实际上将根据newDF中给定的索引(['Thriftway','Meijer'])设置您的newDF。由于(目前)在newDF中没有这两个索引值的任何值,它会将这些索引值的列值写为NaN

设置自定义索引的两种可能的解决方案如下:

  • 在创建数据帧时指定索引
  • 之后使用set_索引
  • 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)