在pandas数据框的顶部添加一行

Shu*_*m R 21 python pandas

以下是我的数据框

import pandas as pd
df = pd.DataFrame({'name': ['jon','sam','jane','bob'],
           'age': [30,25,18,26],
           'sex':['male','male','female','male']})


   age  name     sex
0   30   jon    male
1   25   sam    male
2   18  jane  female
3   26   bob    male
Run Code Online (Sandbox Code Playgroud)

我想在第一个位置插入一个新行

姓名:院长,年龄:45岁,性别:男

   age  name     sex
0   45  dean    male
1   30   jon    male
2   25   sam    male
3   18  jane  female
4   26   bob    male
Run Code Online (Sandbox Code Playgroud)

在熊猫中做到这一点的最佳方法是什么?

edy*_*y13 20

可能这不是最有效的方式,但是:

df.loc[-1] = ['45', 'Dean', 'male']  # adding a row
df.index = df.index + 1  # shifting index
df.sort_index(inplace=True) 
Run Code Online (Sandbox Code Playgroud)

输出:

 age  name     sex
0  45  Dean    male
1  30   jon    male
2  25   sam    male
3  18  jane  female
4  26   bob    male
Run Code Online (Sandbox Code Playgroud)

  • `df.index + 1` - 好主意! (2认同)

Max*_*axU 17

如果它将是一个频繁的操作,那么首先将数据收集到列表然后使用pd.concat([], ignore_index=True)(类似于@Serenity的解决方案)是有意义的(在性能方面):

演示:

data = []

# always inserting new rows at the first position - last row will be always on top    
data.insert(0, {'name': 'dean', 'age': 45, 'sex': 'male'})
data.insert(0, {'name': 'joe', 'age': 33, 'sex': 'male'})
#...

pd.concat([pd.DataFrame(data), df], ignore_index=True)

In [56]: pd.concat([pd.DataFrame(data), df], ignore_index=True)
Out[56]:
   age  name     sex
0   33   joe    male
1   45  dean    male
2   30   jon    male
3   25   sam    male
4   18  jane  female
5   26   bob    male
Run Code Online (Sandbox Code Playgroud)

PS我不会把.append(),pd.concat(),.sort_index()过于频繁(每单排),因为它是相当昂贵.所以我的想法是以大块的方式来做...


Edw*_*ins 6

@edyvedy13 的解决方案对我很有用。但是,它需要更新以弃用熊猫的sort方法 - 现在替换为sort_index.

 df.loc[-1] = ['45', 'Dean', 'male']  # adding a row
 df.index = df.index + 1  # shifting index
 df = df.sort_index()  # sorting by index
Run Code Online (Sandbox Code Playgroud)