Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Insert empty rows after each row

I am trying to insert 3 empty rows after each row of the current data using pandas then export the data. For example a sample current data could be:

name     profession
Bill      cashier
Sam        stock
Adam      security

Ideally what I want to achieve:

name     profession
Bill      cashier
Nan         Nan
Nan         Nan
Nan         Nan
Sam        stock
Nan         Nan
Nan         Nan
Nan         Nan
Adam      security
Nan         Nan
Nan         Nan
Nan         Nan

I have experimented with itertools however i am not sure how i can precisely get three empty rows using after each row using this method. Any help, guidance, sample would definitely be appreciative!

like image 348
olive Avatar asked Mar 07 '26 20:03

olive


2 Answers

Using append on a dataframe is quite inefficient I believe (has to reallocate memory for the entire data frame each time).

DataFrames were meant for analyzing data and easily adding columns—but not rows.

So I think a good approach would be to create a new dataframe of the correct size and then transfer the data over to it. Easiest way to do that is using an index.

# Demonstration data
data = 'name profession Bill cashier Sam stock Adam security'
data = np.array(data.split()).reshape((4,2))
df = pd.DataFrame(data[1:],columns=data[0])

# Add n blank rows
n = 3
new_index = pd.RangeIndex(len(df)*(n+1))
new_df = pd.DataFrame(index=new_index, columns=df.columns, dtype='object')
ids = np.arange(len(df))*(n+1)
new_df.loc[ids] = df.values
print(new_df)

Output:

    name profession
0   Bill    cashier
1    NaN        NaN
2    NaN        NaN
3    NaN        NaN
4    Sam      stock
5    NaN        NaN
6    NaN        NaN
7    NaN        NaN
8   Adam   security
9    NaN        NaN
10   NaN        NaN
11   NaN        NaN
like image 167
Bill Avatar answered Mar 09 '26 10:03

Bill


 insert_rows = 3   # how many rows to insert

 df.index = range(0, insert_rows * len(df), insert_rows)

 # create new_df with added rows
 new_df = df.reindex(index = range(insert_rows * len(df))) 
like image 23
Pedro Martinez Avatar answered Mar 09 '26 09:03

Pedro Martinez



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!