2017-04-14 54 views
4

下面是我的數據框添加一行

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 

我想在第一位置

名稱插入新行:院長,年齡:45,性別:男

age name  sex 
0 45 dean male 
1 30 jon male 
2 25 sam male 
3 18 jane female 
4 26 bob male 

在熊貓做這件事的最好方法是什麼?

+0

@MaxU我編輯了我的問題 – Shubham

+0

還有一個問題 - 是否會定期(頻繁)操作? – MaxU

+1

@MaxU是的,這將是一個頻繁的操作 – Shubham

回答

3

,那麼它是有道理的(在性能方面)先收集數據到一個列表,然後使用pd.concat([], ignore_index=True)(類似於@Serenity's solution):

演示:

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 

PS我不會把.append()pd.concat().sort_index()太frequentl y(對於每一行),因爲它非常昂貴。所以這個想法是以塊的形式做的...

4

也許這不是最有效的方法,但是:

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

輸出:

age name  sex 
0 45 Dean male 
1 30 jon male 
2 25 sam male 
3 18 jane female 
4 26 bob male 
+1

'df.index + 1' - 好主意! – MaxU

+1

我只是稍微加上最後一行:df.sort_index(inplace = True) – Rohit

1

使用pandas.concat和重新編制新的數據框:

import pandas as pd 
df = pd.DataFrame({'name': ['jon','sam','jane','bob'], 
      'age': [30,25,18,26], 
      'sex':['male','male','female','male']}) 
# new line 
line = pd.DataFrame({'name': 'dean', 'age': 45, 'sex': 'male'}, index=[0]) 
# concatenate two dataframe 
df2 = pd.concat([line,df.ix[:]]).reset_index(drop=True) 
print (df2) 

輸出:

age name  sex 
0 45 dean male 
1 30 jon male 
2 25 sam male 
3 18 jane female 
4 26 bob male 
1
import pandas as pd 


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

df1 = pd.DataFrame({'name': ['dean'], 'age': [45], 'sex':['male']}) 
df1 = df1.append(df) 
df1 = df1.reset_index(drop=True) 

,如果它要成爲一個頻繁操作的工作

1

@edyvedy13's solution對我很好。然而,它需要更新爲deprecation的熊貓'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 
0

這對我很有用。

>>> import pandas as pd 
>>> df = pd.DataFrame({'name': ['jon','sam','jane','bob'], 
...   'age': [30,25,18,26], 
...   'sex':['male','male','female','male']})  >>> df 
    age name  sex 
0 30 jon male 
1 25 sam male 
2 18 jane female 
3 26 bob male 
>>> df.loc['a']=[45,'dean','male'] 
>>> df 
    age name  sex 
0 30 jon male 
1 25 sam male 
2 18 jane female 
3 26 bob male 
a 45 dean male 
>>> newIndex=['a']+[ind for ind in df.index if ind!='a'] 
>>> df=df.reindex(index=newIndex) 
>>> df 
    age name  sex 
a 45 dean male 
0 30 jon male 
1 25 sam male 
2 18 jane female 
3 26 bob male