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

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

我明白了

   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/

相关文章:

python - scipy 插值从文件导入的二维数据

python - 多余的 python 参数

python - 使用 Pandas 按日期时间间隔分组

python - Pandas 在多列上搜索子字符串

python - 在 Python 中格式化绘图上的时间

python -/admin/login/处的 OperationalError 尝试写入只读数据库

python - pip error "ValueError: (' Missing distribution spec', '==' )”在 ubuntu 服务器上安装 pandas 时

python - 时间数据 '2019-06-02T16:19:27.000-04:00' 与格式 '%Y-%m-%dT%H:%M:%S.%fZ' 不匹配

python - 如何检查一列的每个值是否正好映射到另一列中的一个值?

python - 旋转 pandas 数据框后无法读取列