मुझे आपके सिंटैक्स से भी काम करने की उम्मीद होगी। समस्या तब उत्पन्न होती है क्योंकि जब आप स्तंभ-सूची सिंटैक्स ( df[[new1, new2]] = ...
) के साथ नए कॉलम बनाते हैं , तो पंडों को यह आवश्यक होता है कि दाहिने हाथ की ओर एक DataFrame हो (ध्यान दें कि यदि DataFrame के कॉलम में समान नाम हैं तो यह वास्तव में कोई फर्क नहीं पड़ता। तुम पैदा कर रहे हो)।
आपका सिंटैक्स मौजूदा कॉलमों में स्केलर मान निर्दिष्ट करने के लिए ठीक काम करता है , और पैंडस सिंगल-कॉलम सिंटैक्स ( df[new1] = ...
) का उपयोग करके स्केलर मानों को एक नए कॉलम में असाइन करने में भी खुश हैं । इसलिए समाधान या तो इसे कई एकल-स्तंभ असाइनमेंट में परिवर्तित करने के लिए है, या दाईं ओर के लिए एक उपयुक्त DataFrame बनाएं।
यहाँ कई दृष्टिकोण हैं जो काम करेंगे :
import pandas as pd
import numpy as np
df = pd.DataFrame({
'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7]
})
फिर निम्न में से एक:
1) तीन कार्य में एक, सूची unpacking का उपयोग:
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) पिछले के समान, लेकिन join
इसके बजाय का उपयोग करना concat
(कम कुशल हो सकता है):
df = df.join(pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
))
5) पिछले दो की तुलना में नए डेटा फ्रेम बनाने के लिए एक तानाशाही का उपयोग करना अधिक "प्राकृतिक" तरीका है, लेकिन नए कॉलमों को वर्णानुक्रम में (कम से कम पायथन 3.6 या 3.7 से पहले ) हल किया जाएगा :
df = df.join(pd.DataFrame(
{
'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3
}, index=df.index
))
6) .assign()
कई कॉलम तर्क के साथ उपयोग करें ।
मुझे यह वेरिएंट @ ज़ीरो के उत्तर पर बहुत पसंद है, लेकिन पिछले वाले की तरह, नए कॉलम हमेशा वर्णानुक्रम में छाँटे जाएंगे, कम से कम पायथन के शुरुआती संस्करणों के साथ:
df = df.assign(column_new_1=np.nan, column_new_2='dogs', column_new_3=3)
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
नोट: इनमें से कई विकल्प पहले से ही अन्य उत्तरों में शामिल किए गए हैं: DataFrame में कई कॉलम जोड़ें और उन्हें मौजूदा कॉलम के बराबर सेट करें , क्या एक पांडा डेटाफ़्रेम में एक बार में कई कॉलम जोड़ना संभव है? , पंडों के लिए कई खाली कॉलम जोड़ें DataFrame
KeyError: "None of [Index(['column_new_1', 'column_new_2', 'column_new_3'], dtype='object')] are in the [columns]"