Add the line at the top to the pandas dataframe

Below is my data file

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 

I want to insert a new line in the first position

name: dean, age: 45, sex: man

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

What is the best way to do this in pandas?

+5
source share
6 answers

If this is a frequent operation, then it makes sense (in terms of performance) to first collect the data into a list, and then use pd.concat([], ignore_index=True) (similar to @ Serenity Solution ):

Demo:

 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 I would not call .append() , pd.concat() , .sort_index() too often (for each individual line), since it is quite expensive. So the idea is to do it in pieces ...

+3
source

This may not be the most efficient way, but:

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

Output:

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

Use pandas.concat and update the new data frame:

 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) 

Output:

  age name sex 0 45 dean male 1 30 jon male 2 25 sam male 3 18 jane female 4 26 bob male 
+1
source
 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) 

It works

+1
source

@ edyvedy13 solution worked great for me. However, it must be updated to deprecate the pandas' sort method - now replaced by 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 
+1
source

This will work for me.

 >>> 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 
0
source

Source: https://habr.com/ru/post/1266731/


All Articles