我有一个系列和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]
我得到了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
答案 0 :(得分:3)
请尝试以下任一行。
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
请注意原始的unsubset系列以来的索引值如下。
>>> s
0 1
1 2
2 3
3 5
dtype: int64
df
中第一行的索引为0.通过使用values
调用删除索引,可以绕过生成NaN
的索引匹配。通过在第二个选项中重置索引,可以使索引相同。