。loc的熊猫数据帧分配因MultiIndex而失败

问题描述 投票:0回答:2

我有一个具有多重索引的数据框,当我尝试使用.loc分配给切片时,该数据框中的结果值为NaN s

我正在使用Jupyter笔记本。

columns = pd.MultiIndex.from_product([['A','B'], ['a', 'b', 'c', 'd', 'e']])
print(columns)
MultiIndex([('A', 'a'),
            ('A', 'b'),
            ('A', 'c'),
            ('A', 'd'),
            ('A', 'e'),
            ('B', 'a'),
            ('B', 'b'),
            ('B', 'c'),
            ('B', 'd'),
            ('B', 'e')],
           )

df = pd.DataFrame(np.zeros(shape=(3,10)), columns=columns)
print(df)
     A                        B                    
     a    b    c    d    e    a    b    c    d    e
0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

print(df.loc[0,'A'])
a    0.0
b    0.0
c    0.0
d    0.0
e    0.0
Name: 0, dtype: float64

values = pd.Series(np.ones(5), index=['a','b','c','d','e'])
print(values)
a    1.0
b    1.0
c    1.0
d    1.0
e    1.0
dtype: float64

df.loc[0,'A'] = values
print(df)
     A                        B                    
     a    b    c    d    e    a    b    c    d    e
0  NaN  NaN  NaN  NaN  NaN  0.0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
python pandas
2个回答
0
投票

我正在替换

df.loc[0, 'A'] = values

for i in range(len(values)):
    df.loc[0, 'A'][i] = values[i]

它正常工作

如果要基于索引进行分配,则可以使用

for index in values.index:
    df.loc[0, 'A'][index] = values[index]

0
投票

您可以只使用numpy数组,而不要使用序列。

df.loc[0,'A'] = values.values
© www.soinside.com 2019 - 2024. All rights reserved.