Python向数据帧添加列会导致NaN

时间:2017-02-04 13:42:53

标签: 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

为什么我会得到NaN?我尝试使用正确的idx创建新系列,但是将其添加到df仍会导致NaN。

我想要的是

   0-2  1-3
0    1  2
1    2  3
2    3  5

1 个答案:

答案 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的索引匹配。通过在第二个选项中重置索引,可以使索引相同。