是否可以使用Pandas在 Dataframe 的任意位置插入一行?

9o685dep  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(170)

我有一个DataFrame对象,类似于下面这个对象:

onset    length
1      2.215    1.3
2     23.107    1.3
3     41.815    1.3
4     61.606    1.3
...

我想做的是在某个索引值指定的位置插入一行,并相应地更新以下索引。

onset    length
1      2.215    1.3
2     23.107    1.3
3     30.000    1.3  # new row
4     41.815    1.3
5     61.606    1.3
...

做这件事的最好方法是什么?

1u4esq0p

1u4esq0p1#

你可以切片并使用concat来得到你想要的。

line = DataFrame({"onset": 30.0, "length": 1.3}, index=[3])
df2 = concat([df.iloc[:2], line, df.iloc[2:]]).reset_index(drop=True)

这将在示例输出中生成 Dataframe 。据我所知,concat是在panda中实现插入类型操作的最佳方法,但不可否认,我绝不是pandaMaven。

7kqas0il

7kqas0il2#

我发现排序比切片和连接更具可读性。

line = DataFrame({"onset": 30.0, "length": 1.3}, index=[2.5])
df = df.append(line, ignore_index=False)
df = df.sort_index().reset_index(drop=True)
b4qexyjb

b4qexyjb3#

我认为不使用concat或append会更容易:

df.loc[2.5] = 30.0, 1.3
df = df.sort_index().reset_index(drop=True)

(假设索引如所提供,从1开始)

5ktev3wc

5ktev3wc4#

如果您想保留原始索引,这可能会更好:

df = pd.DataFrame(dict(x=[0, 1, 2, 3, 4]))
df_update = pd.DataFrame(dict(x=[10, 11, 12]), index=[3, 4, 5])

# concat df_update first
df = pd.concat([df_update, df], axis=0)

# drop duplicates, updates will be prioritized
df = df.iloc[df.index.drop_duplicates()]

# sort to regain order
df.sort_index(inplace=True)

相关问题