งานง่ายๆในการเพิ่มแถวให้กับpandas.DataFrame
วัตถุดูเหมือนจะทำได้ยาก มีคำถามเกี่ยวกับ stackoverflow 3 คำถามซึ่งไม่มีคำถามใดให้คำตอบที่ใช้ได้
นี่คือสิ่งที่ฉันพยายามทำ ฉันมี DataFrame ซึ่งฉันรู้จักรูปร่างตลอดจนชื่อของแถวและคอลัมน์แล้ว
>>> 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
ตอนนี้ฉันมีฟังก์ชั่นในการคำนวณค่าของแถวซ้ำ ๆ ฉันจะกรอกหนึ่งในแถวด้วยพจนานุกรมหรือ a pandas.Series
? ความพยายามต่างๆที่ล้มเหลวมีดังนี้
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df['y'] = y
AssertionError: Length of values does not match length of index
เห็นได้ชัดว่ามันพยายามเพิ่มคอลัมน์แทนแถว
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'
ข้อความแสดงข้อผิดพลาดที่ไม่เป็นข้อมูลมาก
>>> 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)
เห็นได้ชัดว่ามีไว้สำหรับการตั้งค่าแต่ละค่าในดาต้าเฟรมเท่านั้น
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True
ฉันไม่ต้องการเพิกเฉยต่อดัชนีมิฉะนั้นนี่คือผลลัพธ์:
>>> 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
มันจัดตำแหน่งชื่อคอลัมน์ให้สอดคล้องกับค่า แต่ทำให้ป้ายชื่อแถวหายไป
>>> 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
นั่นก็ล้มเหลวอย่างน่าอนาถ
แล้วคุณจะทำอย่างไร?
loc
แอตทริบิวต์ของ data frame จึงกำหนดความพิเศษ__setitem__
ที่ใช้เวทมนตร์ที่ฉันคิด