Reputation:
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
Reputation: 95
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
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
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
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