เพิ่มคอลัมน์ไปยัง dataframe ด้วยค่าคงที่


187

ฉันมี dataframe ที่มีอยู่ซึ่งฉันต้องการเพิ่มคอลัมน์เพิ่มเติมซึ่งจะมีค่าเดียวกันสำหรับทุกแถว

df ที่มีอยู่:

Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450

ใหม่ df:

Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450

ฉันรู้วิธีผนวกคอลัมน์ซีรีย์ / ดาต้าเฟรมที่มีอยู่ แต่นี่เป็นสถานการณ์ที่แตกต่างกันเพราะทั้งหมดที่ฉันต้องการคือการเพิ่มคอลัมน์ 'ชื่อ' และตั้งค่าทุกแถวเป็นค่าเดียวกันในกรณีนี้ 'abc'

คำตอบ:


295

df['Name']='abc' จะเพิ่มคอลัมน์ใหม่และตั้งค่าแถวทั้งหมดเป็นค่านั้น:

In [79]:

df
Out[79]:
         Date, Open, High,  Low,  Close
0  01-01-2015,  565,  600,  400,    450
In [80]:

df['Name'] = 'abc'
df
Out[80]:
         Date, Open, High,  Low,  Close Name
0  01-01-2015,  565,  600,  400,    450  abc

35
มีวิธีอื่นที่จะทำเช่นนี้? ฉันได้รับคำเตือนต่อไปนี้ ค่ากำลังพยายามตั้งค่าบนสำเนาของชิ้นจาก DataFrame ลองใช้. loc [row_indexer, col_indexer] = ค่าแทน ดูคำเตือนในเอกสารประกอบ: pandas.pydata.org/pandas-docs/stable/ …
vishnu viswanath

3
นั่นหมายความว่าคุณกำลังกำหนดสิ่งที่เป็นสำเนาไม่ใช่ต้นฉบับ df ฉันไม่สามารถแสดงความคิดเห็นเพิ่มเติมได้หากไม่เห็นข้อมูลและรหัสของคุณในรูปแบบของคำถาม ตอบคำถามในความคิดเห็นตอบโต้การผลิต รหัสนี้ใช้งานได้คุณได้ทำอะไรก่อนหน้านี้เพื่อแจ้งเตือน
EdChum

@vishnuviswanath ฉันได้รับคำเตือนแบบเดียวกับคุณเมื่อฉันใช้ Jupyter Notebook มันเกิดขึ้นกับฉันเมื่อฉันมีขนาด DataFrame ที่ไม่สำคัญ (> 200 บันทึก) และการรวมกันบางอย่างของการมอบหมายและเพียงพิมพ์ df
Bill

4
@vishnuviswanath คุณอาจสร้างส่วนข้อมูลต้นฉบับก่อนหน้านี้จากนั้นลองตั้งค่าคอลัมน์ใหม่ในส่วนข้อมูลนั้น เพิ่มคอลัมน์ใหม่ไปยัง dataframe ดั้งเดิมแทนแล้วสร้างชิ้นหลังจากนั้น อาจเป็นเมื่อคุณสร้างส่วนหนึ่งของ dataframe นุ่นไม่ได้สร้างสำเนาและจัดการอย่างใดอย่างหนึ่งจาก dataframe เดิม ชนิดนี้ยุ่งกับการเพิ่มประสิทธิภาพนั้นและด้วยเหตุนี้คำเตือน
amit_saxena

2
หากต้องการแก้ไขคำเตือนของแพนด้าที่กล่าวถึงให้รับสำเนาของไฟล์ข้อมูลที่ใช้.copy()ก่อนใช้งาน (ยกเว้นกรณีที่มีขนาดใหญ่มากหรือบางสิ่ง
matanster

61

คุณสามารถใช้insertเพื่อระบุตำแหน่งที่คุณต้องการให้คอลัมน์ใหม่เป็น ในกรณีนี้ฉันใช้0เพื่อวางคอลัมน์ใหม่ทางซ้าย

df.insert(0, 'Name', 'abc')

  Name        Date  Open  High  Low  Close
0  abc  01-01-2015   565   600  400    450

มันไม่ได้ผลสำหรับฉัน เมทริกซ์เดิมของฉันคือ 1460 x 41 และฉันพยายามที่จะเพิ่มคอลัมน์ 1 df.insert(0,'coef_fix',1)ไปด้านหน้า: ฉันกำลังใช้ JupyterLab กับ Python 3.0
ColinMac

2
ทำงานได้ดีสำหรับฉัน คุณอาจไม่ได้ตระหนักว่าดำเนินการinsert inplaceซึ่งหมายความว่าค่าของ data data ใหม่จะไม่ถูกส่งคืน แต่ data data ต้นฉบับได้ถูกแก้ไข ลองนี้df = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

44

งานซับเดี่ยว

df['Name'] = 'abc'

สร้างNameคอลัมน์และตั้งค่าแถวทั้งหมดเป็นabcค่า


41

สรุปสิ่งที่คนอื่นแนะนำและเพิ่มวิธีที่สาม

คุณสามารถ:

  • มอบหมาย (** kwargs) :

    df.assign(Name='abc')
  • เข้าถึงชุดคอลัมน์ใหม่ (จะถูกสร้างขึ้น) และตั้งค่า:

    df['Name'] = 'abc'
  • แทรก (loc, คอลัมน์, ค่า, allow_duplicates = False)

    df.insert(0, 'Name', 'abc')

    โดยที่อาร์กิวเมนต์ loc (0 <= loc <= len (คอลัมน์)) อนุญาตให้คุณแทรกคอลัมน์ที่คุณต้องการ

    'loc' ให้ดัชนีว่าคอลัมน์ของคุณจะอยู่หลังการแทรก ตัวอย่างเช่นโค้ดด้านบนจะแทรกชื่อคอลัมน์เป็นคอลัมน์ 0 ซึ่งจะถูกแทรกก่อนคอลัมน์แรกกลายเป็นคอลัมน์แรกใหม่ (การทำดัชนีเริ่มต้นจาก 0)

วิธีการทั้งหมดนี้ช่วยให้คุณสามารถเพิ่มคอลัมน์ใหม่จากซีรี่ส์ได้เช่นกัน (เพียงแทนที่อาร์กิวเมนต์เริ่มต้น 'abc' ข้างต้นด้วยชุดข้อมูล)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.