我的数据框有一个列表作为索引,我如何访问一个单元格或编辑一个单元格
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 index
或MultiIndex
吗?
不完全是,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 单元格