pandas: df.loc[-1,col] 有时工作,有时用 NAN 添加额外的行

标签 pandas

我有一个 Pandas 数据框。我正在尝试修改最后一行中的 name 列值

我试试

df.loc[-1,'name'] = "something"

这行得通

现在我使用查询从 df 中过滤几行并将其命名为 df_query

我在 df_query 中的最后一行是

    id  name
21  965 kris

我检查索引 -1

df_query.loc['name'].iloc[-1]

它显示“kris”

现在开始 df_query 我试试

df_query.loc[-1,'name'] = "something"

它添加了一个额外的行,而不是将 kris 替换为 something

    id  name
21  965.0 kris
-1  NaN "something"

还将 id 从 int 转换为 float

为什么有时能用有时不能用

搜索后我在 https://stackoverflow.com/a/49510469 找到了

Just using iloc[-1, 'a] won't work as -1 is not in the index.

我无法理解上面给出的原因

并说要尝试:

df_query.loc[df_query.loc.index[-1],'name'] = "something"

现在可以了。

谁能解释一下发生了什么

最佳答案

您可以通过不同的方式选择name 的最后一个值 - 如果使用 DataFrame.loc如果索引值是唯一的,则使用 df.index 作为索引的最后一个值:

df.loc[df.index[-1],'name'] = "something"

或者如果使用 DataFrame.iloc通过 Index.get_loc 获取 name 列的位置:

df.iloc[-1,df.columns.get_loc('name')] = "something"

如果使用:

df.loc[-1,'name'] = "something"

Pandas 尝试使用 index=-1 设置行(如果存在),否则创建索引为 -1 的新行。问题是如果最后一个索引没有 -1,但是例如第一个索引,它不是最后一行,而是第一行。

也是可能的用途:

#tested last value of index
if df.index[-1] == -1:
    #last value is set
    df.loc[-1,'name'] = "something"

#tested all values if index
elif (df.index == -1).any():
    #some value with -1 is set
    df.loc[-1,'name'] = "something"
else:
    #new row with -1 is created
    df.loc[-1,'name'] = "something"

关于pandas: df.loc[-1,col] 有时工作,有时用 NAN 添加额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66096734/

相关文章:

python - 滚动窗口不包括当前行

python - 如何用列值替换 Pandas 数据框中的每个值?

python - 在groupby之后找到具有对应值的nlargest(2)

Pandas 合并并加入不起作用

python - 当重复的 ID 有付款日期时创建新列( Pandas 数据框)

python - 查找并返回至少有一个 np.inf 值的 Pandas 数据帧的行

python - 将数据与其他数据框合并时如何避免数据框中的列很少?

Python Pandas 如何将 groupby 操作结果分配回父数据框中的列?

python - 使用Python提取csv(数据框)中的特定字符串数据

pandas - 如何在 pandas 中使用数据透视表处理大块数据