2016-09-27 2 views
4

Я хочу, чтобы динамически расширить пустой панд DataFrame следующим образом:Добавление элементов в пустой панд DataFrame

df=pd.DataFrame() 
indices=['A','B','C'] 
colums=['C1','C2','C3'] 
for colum in colums: 
    for index in indices: 
     #df[index,column] = anyValue 

Где оба индекса и colums могут иметь произвольные размеры, которые не известны заранее, то есть я не могу создать DataFrame с правильным размером заранее.

Какие функции панд можно использовать для

#df[index,column] = anyValue 

?

ответ

3

Я думаю, что вы можете использовать loc:

df = pd.DataFrame() 

df.loc[0,1] = 10 
df.loc[2,8] = 100 
print(df) 
     1  8 
0 10.0 NaN 
2 NaN 100.0 

Faster решение с DataFrame.set_value:

df = pd.DataFrame() 
indices = ['A', 'B', 'C'] 
columns = ['C1', 'C2', 'C3'] 
for column in columns: 
    for index in indices: 
     df.set_value(index, column, 1) 

print(df) 
    C1 C2 C3 
A 1.0 1.0 1.0 
B 1.0 1.0 1.0 
C 1.0 1.0 1.0 
+0

Да, это было бы возможно - но мне нужны индексы и строки столбцов. Существует ли какая-либо вариация loc такая, что в результате df будут содержать индексы «A», «B» и т. Д. И имена столбцов «C1», «C2»? – user1934212

2

loc работает очень хорошо, но ...
Для одиночных заданий использовать at

df = pd.DataFrame() 
indices = ['A', 'B', 'C'] 
columns = ['C1', 'C2', 'C3'] 
for column in columns: 
    for index in indices: 
     df.at[index, column] = 1 

df 

enter image description here


.at против .loc против .set_value времени

enter image description here

+0

Спасибо, это похоже на то, что мне нужно – user1934212

+0

Можете ли вы добавить тайминги для set_value? – jezrael

+0

@piRSquared - Спасибо. – jezrael