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.