Python向dataframe添加列会导致NaN

Python向dataframe添加列会导致NaN,python,pandas,Python,Pandas,我有一个系列和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 为什么我会变傻?我尝试使用正确的IDX创建新系列,但将其添加到df仍然会导致NaN 我想要的是 0-2 1-3 0

我有一个系列和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
为什么我会变傻?我尝试使用正确的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。通过删除带有
值的索引
调用,可以绕过产生
NaN
的索引匹配。通过在第二个选项中重置索引,可以使索引相同。

因此,也许我应该以某种方式重置索引?当然。您也可以使用以下内容
s.iloc[1:4]。重置索引(drop=True)