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的主要内容,如果未能解决你的问题,请参考以下文章