मुझे आपके वाक्यविन्यास को भी काम करने की उम्मीद होगी। समस्या उत्पन्न होती है क्योंकि जब आप कॉलम-सूची सिंटैक्स (df[[new1, new2]] = ...
) के साथ नए कॉलम बनाते हैं, तो पांडा की आवश्यकता होती है कि दायां हाथ एक डेटाफ्रेम हो (ध्यान दें कि यह वास्तव में कोई फर्क नहीं पड़ता कि डेटाफ्रेम के कॉलम के समान नाम हैं कॉलम जो आप बना रहे हैं)।
आपका वाक्य रचना मौजूदा स्तंभों को अदिश मान निर्दिष्ट के लिए ठीक काम करता है, और पांडा भी एकल-स्तंभ वाक्य रचना (df[new1] = ...
) का उपयोग कर एक नया स्तंभ को अदिश मान निर्दिष्ट करने के लिए खुश है। तो समाधान या तो इसे कई सिंगल-कॉलम असाइनमेंट में परिवर्तित करने के लिए है, या दाईं ओर एक उपयुक्त डेटाफ्रेम बनाएं।
यहाँ कई दृष्टिकोण हैं कि होगा काम:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7]
})
फिर से एक निम्नलिखित:
(1) तकनीकी तौर पर यह तीन चरणों है, लेकिन यह एक कदम की तरह दिखता है:
df['column_new_1'], df['column_new_2'], df['column_new_3'] = [np.nan, 'dogs', 3]
(2) DataFrame
आसानी से सूचकांक से मेल खाने के लिए एक पंक्ति का विस्तार करता है, ताकि आप यह कर सकें:
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
(3) यह अच्छी तरह से काम करेगा अगर आप नए स्तंभ के साथ एक अस्थायी डेटा फ्रेम बनाने के लिए, फिर बाद में मूल डेटा फ्रेम के साथ गठबंधन:
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
(4) पिछले की तरह, लेकिन concat
के बजाय join
का उपयोग कर (कम कुशल हो सकता है):
df = df.join(pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
))
(5) यह एक अधिक "प्राकृतिक" की तुलना में पिछले दो नए डेटा फ्रेम बनाने के लिए तरीका है, लेकिन नए स्तंभ अल्फा हल हो जाएगा betically (कम से कम before Python 3.6 or 3.7):
df = df.join(pd.DataFrame(
{
'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3
}, index=df.index
))
(6) मैं @ पर इस प्रकार की तरह शून्य के एक बहुत का जवाब है, लेकिन कम से कम अजगर के प्रारंभिक संस्करणों के साथ पिछले एक की तरह, नए कॉलम हमेशा वर्णानुक्रम हल हो जाएगा :
df = df.assign(column_new_1=np.nan, column_new_2='dogs', column_new_3=3)
(7) यह दिलचस्प है (पर https://stackoverflow.com/a/44951376/3830997 आधारित), लेकिन मैं नहीं जानता कि जब यह मुसीबत के लायक हो जाएगा:
new_cols = ['column_new_1', 'column_new_2', 'column_new_3']
new_vals = [np.nan, 'dogs', 3]
df = df.reindex(columns=df.columns.tolist() + new_cols) # add empty cols
df[new_cols] = new_vals # multi-column assignment works for existing cols
(8) में अंत में यह मुश्किल है इस को हरा:
df['column_new_1'] = np.nan
df['column_new_2'] = 'dogs'
df['column_new_3'] = 3
नोट: इन विकल्पों में से कई पहले से ही अन्य उत्तर में शामिल किया गया है: Add multiple columns to DataFrame and set them equal to an existing column, Is it possible to add several columns at once to a pandas DataFrame?, Pandas: Add multiple empty columns to DataFrame
यदि एक चरण में अपना दूसरा भाग करने का कोई तरीका था - हाँ उदाहरण के रूप में कॉलम में स्थिर मान। – runningbirds