我的数据框有一个列表作为索引,我如何访问一个单元格或编辑一个单元格

Posted

技术标签:

【中文标题】我的数据框有一个列表作为索引,我如何访问一个单元格或编辑一个单元格【英文标题】:My dataframe has a list as an index, how do I access a cell or edit a cell 【发布时间】:2017-11-28 11:01:11 【问题描述】:

我的 pandas 数据框看起来像这样

                   A          B          C          D          E
(Name1, 1)         NaN        NaN        NaN        NaN        NaN  
(Name2, 2)         NaN        NaN        NaN        NaN        NaN

如何访问特定单元格或更改特定单元格的值

我使用这个创建了数据框

id=list(product(array1,array2))
data=pd.DataFrame(index=id ,columns=array3)

【问题讨论】:

你有tuple indexMultiIndex 吗? 不完全是,id 是列表的列表:Array1 的长度!= Array2 的长度;所以产品是将数组 1 和数组 2 的每个组合放入列表列表中 =>>>[ [array1[0],array2[0]] , [array1[0],array2[1]] , [array1[1 ],array2[0]] ] 等等 好的,但我认为最好使用MultiIndex - 这是熊猫中非常好的功能。 【参考方案1】:

我觉得你需要MultiIndex:

np.random.seed(124)
array1 = np.array(['Name1','Name2'])
array2 = np.array([1,2])
array3 = np.array(list('ABCDE'))
idx= pd.MultiIndex.from_product([array1,array2])
data=pd.DataFrame(np.random.randint(10, size=[len(idx), len(array3)]),
                  index=idx ,columns=array3)
print (data)
         A  B  C  D  E
Name1 1  1  7  2  9  0
      2  4  4  5  5  6
Name2 1  9  6  0  8  9
      2  9  0  2  2  1

print (data.index)
MultiIndex(levels=[['Name1', 'Name2'], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])


data.loc[('Name1', 2), 'B'] = 20
print (data)
         A  B  C  D  E
Name1 1  1  7  2  9  0
      2  4 20  5  5  6
Name2 1  9  6  0  8  9
      2  9  0  2  2  1

对于复杂的选择使用slicers:

idx = pd.IndexSlice
data.loc[idx['Name1', 2], 'B'] = 20
print (data)
         A  B  C  D  E
Name1 1  1  7  2  9  0
      2  4 20  5  5  6
Name2 1  9  6  0  8  9
      2  9  0  2  2  1

idx = pd.IndexSlice
print (data.loc[idx['Name1', 2], 'A'])
4

#select all values with 2 of second level and column A
idx = pd.IndexSlice
print (data.loc[idx[:, 2], 'A'])
Name1  2    4
Name2  2    9
Name: A, dtype: int32

#select 1 form second level and slice between B and D columns
idx = pd.IndexSlice
print (data.loc[idx[:, 1], idx['B':'D']])
         B  C  D
Name1 1  7  2  9
Name2 1  6  0  8

对于更简单的选择使用DataFrame.xs:

print (data.xs('Name1', axis=0, level=0))
   A  B  C  D  E
1  1  7  2  9  0
2  4  4  5  5  6

【讨论】:

完美!谢谢,不知道如何使用 MultiIndex ( MultiIndex.from_product) 所以不得不求助于我所做的

以上是关于我的数据框有一个列表作为索引,我如何访问一个单元格或编辑一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代数据列的每个单元格,转换和附加每个单元格?

如何从 Flutter 中的网格视图计数访问生成列表中的特定单元格?

在给定的索引路径访问 UICollectionView 单元格

如何从excel单元格中读取列表

如何访问 Angular Material Data-Table 中同一行的不同单元格中的单元格的值?

无法获得第一个单元格的正确索引