【问题标题】:Good alternative to Pandas .append() method, now that it is being deprecated?Pandas .append() 方法的好替代品,现在它已被弃用?
【发布时间】:2022-01-24 16:46:44
【问题描述】:

我经常使用以下方法将单行附加到数据框。我真正喜欢它的一件事是它允许您附加一个简单的 dict 对象。例如:

# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])

# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)

再一次,我最喜欢这个的地方是代码非常干净,只需要很少的行。现在我想推荐的替代方案是:

# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])

所以之前的一行代码现在是两行带有一次性变量和额外的杂乱无章的地方,我在其中创建了新的数据框。 :( 有没有像我过去那样使用字典的好方法(不推荐使用)?

【问题讨论】:

  • pandas issue 35407 解释说 df.append 已被弃用,因为:“Series.append 和 DataFrame.append [正在] 类比 list.append,但这是一个不好的类比,因为行为不是(并且不能)到位。需要复制索引和值的数据以创建结果。"
  • 今天遇到了这个警告。但是,当我使用 concat 作为替代方案时,我得到“无法连接类型为 '' 的对象;只有 Series 和 DataFrame objs 有效”。太令人沮丧了.....

标签: python pandas dataframe data-wrangling data-munging


【解决方案1】:

如果需要,请使用您的字典创建一个列表,然后使用 df = pd.DataFrame.from_records(your_list) 创建一个新数据框。 List 的“追加”方法非常有效,并且永远不会被弃用。另一方面,由于它们的设计,经常需要重新创建数据帧并将所有数据复制到附加上 - 这就是他们弃用该方法的原因

【讨论】:

【解决方案2】:

我也喜欢 append 方法。 但是你可以用一个字典列表在一行中做到这一点

df = pd.concat([df, pd.DataFrame.from_records([{ 'a': 1, 'b': 2 }])])

或者使用 loc 和 tuples 获取具有递增升序索引的 DataFrames 上的值

df.loc[len(df), ['a','b']] = 1, 2

或许

df.loc[len(df), df.columns] = 3, 4

【讨论】:

  • 也可以使用ignore_index df = pd.concat([df, pd.DataFrame.from_records([{ 'a': 1, 'b': 2 }])], ignore_index=True)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多