我有一个系列和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]
我明白了
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
索引时,它会在 df
中的那个位置放置一个 NaN
值。您可以通过仅保留值来解决此问题,这样它就不会尝试匹配索引或重置子集系列的索引。
>>> 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 的索引匹配
。通过在第二个选项中重置索引,您可以使索引相同。
关于Python 向数据框添加列会导致 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041092/