df.append() 未附加到 DataFrame

Posted

技术标签:

【中文标题】df.append() 未附加到 DataFrame【英文标题】:df.append() is not appending to the DataFrame 【发布时间】:2019-05-24 06:42:33 【问题描述】:

我制定了this question 关于添加行的索引,但我还不清楚当没有索引时如何/为什么会发生这种情况:

columnsList=['A','B','C','D']
df8=pd.DataFrame(columns=columnsList)
L=['value aa','value bb','value cc','value dd']
s = pd.Series(dict(zip(df8.columns, L)))
df8.append(s,ignore_index=True)
df8.append(s,ignore_index=True)

我希望这里有一个 2X4 数据帧。 但是没有添加任何值,也没有发生错误。

print(df8.shape)
#>>> (0,4)

为什么没有添加系列,为什么没有报错?


如果我尝试使用 LOC 添加一行,则会添加一个索引,

df8.loc[df8.index.max() + 1, :] = [4, 5, 6,7]
print(df8)

结果:

     A  B  C  D
NaN  4  5  6  7

我猜LOC和iLOC都不能用于追加没有索引名的行(即Loc添加索引名NaN,当索引号高于数据库的行时不能使用iLoc)

【问题讨论】:

【参考方案1】:

DataFrame.append 不是就地操作。从文档中,

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)

将其他行追加到此帧的末尾,返回一个新对象。 不在此框架中的列将作为新列添加。

您需要将结果分配回去。

df8 = df8.append([s] * 2, ignore_index=True)
df8
          A         B         C         D
0  value aa  value bb  value cc  value dd
1  value aa  value bb  value cc  value dd

【讨论】:

"您需要将结果分配回去。"是一个救生员 @SeanMcCarthy 哪里说df.append 就地工作?我对inplace=True 是否真的有益于 API 有强烈的意见。见here @cs95 你是对的。我错误地阅读了文档中的示例……我的错。实际上,它必须分配给一个变量,并且不能原地完成。如果可以就地完成,则可能会像其他 Pandas 方法一样存在inplace=True 的参数【参考方案2】:

声明data.append(sub_data) 不能单独工作

但声明data=data.append(sub_data) 会起作用

重新分配它为我解决了这个问题。其他地方没有的好提示。

【讨论】:

以上是关于df.append() 未附加到 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

连接和附加 DF 会导致两倍的列数

一次追加多个 pandas 数据帧

熊猫数据框追加问题

如何在不使用for循环的情况下从pyspark中的列表创建数据框?

如何重新附加片段(片段未附加到活动 Kotlin)

片段未附加到相应的片段