user13006535
user13006535

Reputation:

Append Pandas dataframe

I'm trying to create an empty dataframe and append it regularly.

This is the code I'm using:

import pandas as pd

column_names = ["number", "number2"]
df = pd.DataFrame(columns=column_names)
#df_list = list(df)
#print(df_list)

x = []
for i in range(1,10):
    x.append([(i+1), (i+2)])

new = df.append(x)
print(new)

However when I append it. This is the result I get. Obviously, I would like to have the numbers under the column names and not in new columns.

 number number2     0     1
0    NaN     NaN   2.0   3.0
1    NaN     NaN   3.0   4.0
2    NaN     NaN   4.0   5.0
3    NaN     NaN   5.0   6.0
4    NaN     NaN   6.0   7.0

Upvotes: 0

Views: 78

Answers (4)

You can use a numpy array to grow your data frame by columns:

import pandas as pd

cols = ["numbes1","number2"]

df = pd.DataFrame()
x = []
for i in range(1,10):
    x.append([i+1,i+2])

# Using numpy arrays
import numpy as np
a = np.array(x)
for index,c in enumerate(cols):
    df[c] = a[:,index]

Upvotes: 0

Sajan
Sajan

Reputation: 1267

You could try something like this -

import pandas as pd
column_names = ["number", "number2"]
df = pd.DataFrame(columns=column_names)
number = []
number2 = []
for i in range(1,10):
   number.append(i+1)
   number2.append(i+2)

df['number'] = number
df['number2'] = number2
df
     number  number2
0       2        2
1       3        3
2       4        4
3       5        5
4       6        6
5       7        7
6       8        8
7       9        9
8      10       10

Upvotes: 0

Code Pope
Code Pope

Reputation: 5449

Use loc, if you exactly know where you want to insert:

import pandas as pd

column_names = ["number", "number2"]
df = pd.DataFrame(columns=column_names)
#df_list = list(df)
#print(df_list)

for i in range(1,10):
    df.loc[i] = [i+1,i+2]#({'number':i+1, 'number2':i+2})

df

Output:

    number  number2
1   2        3
2   3        4
3   4        5
4   5        6
5   6        7
6   7        8
7   8        9
8   9        10
9   10       11

Upvotes: 0

Quang Hoang
Quang Hoang

Reputation: 150735

In general, I would advise against incremental append. But if you really need to, you have to make sure the list have same columns with df:

column_names = ["number", "number2"]
df = pd.DataFrame(columns=column_names)

x= []
for i in range(1,10):
    # we want to align element with df's columns
    x.append({'number':(i+1), 'number2':(i+2)})

new = df.append(x)
print(new)

Output:

  number number2
0      2       3
1      3       4
2      4       5
3      5       6
4      6       7
5      7       8
6      8       9
7      9      10
8     10      11

Upvotes: 1

Related Questions