วิธีที่ง่ายที่สุดในการเพิ่มคอลัมน์ว่างลงในDataFrame
วัตถุแพนด้าคืออะไร สิ่งที่ดีที่สุดที่ฉันเคยเจอคือสิ่งที่ชอบ
df['foo'] = df.apply(lambda _: '', axis=1)
มีวิธีที่ผิดปกติน้อยลงหรือไม่?
วิธีที่ง่ายที่สุดในการเพิ่มคอลัมน์ว่างลงในDataFrame
วัตถุแพนด้าคืออะไร สิ่งที่ดีที่สุดที่ฉันเคยเจอคือสิ่งที่ชอบ
df['foo'] = df.apply(lambda _: '', axis=1)
มีวิธีที่ผิดปกติน้อยลงหรือไม่?
คำตอบ:
ถ้าฉันเข้าใจถูกต้องการมอบหมายควรเติม:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
df
ว่างเปล่าคุณอาจต้องการใช้df['new'] = pd.Series()
(ดูคำตอบของฉันด้านล่าง)
หากต้องการเพิ่มคำตอบและการสร้างคำถามที่เกี่ยวข้องนี้ของ DSM ฉันได้แบ่งวิธีการออกเป็นสองกรณี:
การเพิ่มคอลัมน์เดียว: เพียงแค่กำหนดค่าว่างให้กับคอลัมน์ใหม่เช่น df['C'] = np.nan
การเพิ่มหลายคอลัมน์: ฉันขอแนะนำให้ใช้.reindex(columns=[...])
วิธีการของนุ่นในการเพิ่มคอลัมน์ใหม่ในดัชนีคอลัมน์ของ dataframe .reindex(rows=[...])
นอกจากนี้ยังทำงานสำหรับการเพิ่มแถวใหม่หลายกับ โปรดทราบว่ารุ่นใหม่ของนุ่น (V> 0.20) ช่วยให้คุณสามารถระบุaxis
คำหลักมากกว่าอย่างชัดเจนมอบหมายให้หรือcolumns
rows
นี่คือตัวอย่างการเพิ่มหลายคอลัมน์:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
หรือ
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
คุณยังสามารถต่อเชื่อม dataframe (ว่าง) ใหม่กับ dataframe ที่มีอยู่เดิมได้ แต่นั่นก็ไม่ได้ทำให้ฉันรู้สึกไพเราะ :)
version >= 0.20.0
ลบ DataFrame และเพิ่มคอลัมน์ใหม่เป็นแถว ตัวอย่างversion < 0.20.0
ผลงานดีในรุ่น Pandas0.24.1
, axis=1
version = 0.25
ฉันพยายามแก้ไขคำตอบของคุณเพื่อรวมเวอร์ชันที่อัปเดตแล้ว แต่ฉันถูกปฏิเสธโดย @kenlukas และ @il_raffa ฉันหวังว่าทุกคนจะดิ้นรนเพื่อทำความเข้าใจว่าทำไมคำตอบของคุณไม่ทำงานสำหรับพวกเขา - อย่างที่ฉันเป็น - อย่างน้อยก็เจอความคิดเห็นนี้
ทางออกที่ง่ายกว่าคือ:
df = df.reindex(columns = header_list)
โดยที่ "header_list" คือรายการส่วนหัวที่คุณต้องการให้ปรากฏ
ส่วนหัวใด ๆ ที่รวมอยู่ในรายการที่ไม่พบแล้วใน dataframe จะถูกเพิ่มด้วยเซลล์ว่างด้านล่าง
ดังนั้นถ้า
header_list = ['a','b','c', 'd']
จากนั้น c และ d จะถูกเพิ่มเป็นคอลัมน์ที่มีเซลล์ว่าง
เริ่มต้นด้วยv0.16.0
, DF.assign()
สามารถนำมาใช้กับคอลัมน์ใหม่กำหนด ( / หลายเดียว ) DF
ไปยัง DF
คอลัมน์เหล่านี้ได้รับการแทรกอยู่ในลำดับตัวอักษรในตอนท้ายของ
สิ่งนี้จะได้เปรียบเมื่อเทียบกับการมอบหมายอย่างง่ายในกรณีที่คุณต้องการดำเนินการชุดของการดำเนินการที่ถูกผูกมัดโดยตรงบน dataframe ที่ส่งคืนโดยตรง
พิจารณาDF
ตัวอย่างเดียวกันที่แสดงโดย @DSM:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
โปรดทราบว่าสิ่งนี้จะส่งคืนสำเนาที่มีคอลัมน์ก่อนหน้าทั้งหมดพร้อมกับคอลัมน์ที่สร้างขึ้นใหม่ เพื่อที่DF
จะให้ต้นฉบับถูกดัดแปลงให้ใช้มันเหมือน: df = df.assign(...)
เพราะมันไม่รองรับinplace
การทำงานในปัจจุบัน
ฉันชอบ:
df['new'] = pd.Series(dtype='your_required_dtype')
หากคุณมี dataframe ว่าง, การแก้ปัญหานี้จะทำให้แน่ใจว่าไม่มีแถวใหม่ที่มีเพียงNaN
ถูกเพิ่ม
หากไม่ได้ระบุรุ่นใหม่นุ่นผลิตdtype
DeprecationWarning
หากคุณต้องการเพิ่มชื่อคอลัมน์จากรายการ
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
@ emunsing คำตอบนั้นเจ๋งจริง ๆ สำหรับการเพิ่มหลายคอลัมน์ แต่ฉันไม่สามารถทำให้มันทำงานได้ใน python 2.7 ฉันกลับพบว่างานนี้:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
รหัสด้านล่างตอบคำถาม "ฉันจะเพิ่มจำนวนคอลัมน์ที่ว่างเปล่าใน dataframe ที่มีอยู่ของฉันได้อย่างไร" เพื่อเพิ่มความน่าเชื่อถือของการแก้ปัญหาที่คล้ายกันในที่เดียวฉันเพิ่มที่นี่
วิธีที่ 1 (เพื่อสร้าง 64 คอลัมน์เพิ่มเติมพร้อมชื่อคอลัมน์ตั้งแต่ 1-64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
วิธีที่ 2 (เพื่อสร้าง 64 คอลัมน์เพิ่มเติมพร้อมชื่อคอลัมน์ตั้งแต่ 1-64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
คุณทำได้
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
หนึ่งสามารถใช้df.insert(index_to_insert_at, column_header, init_value)
เพื่อแทรกคอลัมน์ใหม่ที่ดัชนีเฉพาะ
cost_tbl.insert(1, "col_name", "")
ข้อความข้างต้นจะแทรกคอลัมน์ว่างหลังจากคอลัมน์แรก
N/A
?