我有一个具有多重索引的数据框,当我尝试使用.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
我正在替换
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]
您可以只使用numpy数组,而不要使用序列。
df.loc[0,'A'] = values.values