我有一个系列和 df
s = pd.Series([1,2,3,5])
df = pd.DataFrame()
当我像这样向 df 添加列时
df.loc[:, "0-2"] = s.iloc[0:3]
df.loc[:, "1-3"] = s.iloc[1:4]
I get df
0-2 1-3
0 1 NaN
1 2 2.0
2 3 3.0
为什么我得到 NaN?我尝试使用正确的 idx 创建新系列,但将其添加到 df 仍然会导致 NaN。
我想要的是
0-2 1-3
0 1 2
1 2 3
2 3 5
尝试以下任一行。
df.loc[:, "1-3"] = s.iloc[1:4].values
# -OR-
df.loc[:, "1-3"] = s.iloc[1:4].reset_index(drop=True)
您的原始代码尝试匹配数据框的索引失败df
到子集系列的索引s.iloc[1:4]
。当它找不到时0
该系列中的索引,它放置了NaN
值在df
在那个位置。您可以通过仅保留值来解决此问题,这样它就不会尝试匹配索引或重置子集系列上的索引。
>>> s.iloc[1:4]
1 2
2 3
3 5
dtype: int64
请注意索引值,因为原始的未子集化系列如下。
>>> s
0 1
1 2
2 3
3 5
dtype: int64
第一行的索引df
是 0。通过删除索引values
调用时,您绕过了产生的索引匹配NaN
。通过重置第二个选项中的索引,可以使索引相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)