Tugas sederhana untuk menambahkan baris ke pandas.DataFrame
objek tampaknya sulit untuk diselesaikan. Ada 3 pertanyaan stackoverflow yang berkaitan dengan ini, tidak ada yang memberikan jawaban yang berfungsi.
Inilah yang saya coba lakukan. Saya memiliki DataFrame yang saya sudah tahu bentuknya serta nama-nama baris dan kolom.
>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
>>> df
a b c d
x NaN NaN NaN NaN
y NaN NaN NaN NaN
z NaN NaN NaN NaN
Sekarang, saya memiliki fungsi untuk menghitung nilai-nilai baris secara iteratif. Bagaimana saya bisa mengisi salah satu baris dengan kamus atau pandas.Series
? Berikut adalah berbagai upaya yang gagal:
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df['y'] = y
AssertionError: Length of values does not match length of index
Tampaknya ia mencoba menambahkan kolom alih-alih satu baris.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'
Pesan kesalahan sangat tidak informatif.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.set_value(index='y', value=y)
TypeError: set_value() takes exactly 4 arguments (3 given)
Rupanya itu hanya untuk menetapkan nilai individual dalam kerangka data.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True
Yah, saya tidak ingin mengabaikan indeks, jika tidak, inilah hasilnya:
>>> df.append(y, ignore_index=True)
a b c d
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 1 5 2 3
Itu memang menyelaraskan nama kolom dengan nilai-nilai, tetapi kehilangan label baris.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.ix['y'] = y
>>> df
a b \
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
c d
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
Itu juga gagal total.
Jadi, bagaimana Anda melakukannya?
loc
atribut dari frame data mendefinisikan spesial__setitem__
yang melakukan keajaiban kurasa.df = pd.DataFrame({'y': pd.Series(y)}, columns=['a','b','c','d'], index=['x','y','z'])
untuk bekerja?Pendekatan saya adalah, tetapi saya tidak dapat menjamin bahwa ini adalah solusi tercepat.
sumber
append
data ke kerangka data.Ini adalah versi yang lebih sederhana
sumber
Jika baris input Anda adalah daftar dan bukan kamus, maka berikut ini adalah solusi sederhana:
sumber