निरंतर मान के साथ डेटाफ़्रेम में कॉलम जोड़ें


187

मेरे पास एक मौजूदा डेटाफ़्रेम है जिसे मुझे एक अतिरिक्त कॉलम जोड़ना होगा जिसमें हर पंक्ति के लिए समान मूल्य होगा।

मौजूदा डीएफ:

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

मुझे पता है कि मौजूदा श्रृंखला / डेटाफ्रेम कॉलम को कैसे जोड़ा जाए। लेकिन यह एक अलग स्थिति है, क्योंकि मुझे केवल 'नेम' कॉलम को जोड़ना है और हर पंक्ति को एक ही मान पर सेट करना है, इस मामले में 'एबीसी'।

जवाबों:


294

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] = मान का उपयोग करने का प्रयास करें। दस्तावेज़ में कैविएट
vishnu

3
इसका मतलब है कि आप किसी ऐसी चीज़ को असाइन कर रहे हैं जो एक कॉपी है और ओरिजिनल df नहीं है, मैं डेटा के बिना और आपके कोड को प्रश्न के रूप में देखे बिना आगे टिप्पणी नहीं कर सकता। टिप्पणियों में प्रश्नों का उत्तर देना उत्पादक है। यह कोड काम करता है, चेतावनी देने के लिए आपने इससे पहले कुछ किया है
EdChum

@vishnuviswanath मुझे ठीक उसी तरह की चेतावनी मिलती है जब मैं ज्यूपिटर नोटबुक का उपयोग करता हूं। यह मेरे साथ तब होता है जब मेरे पास गैर-तुच्छ डेटाफ़्रेम आकार (> 200 रिकॉर्ड) और असाइनमेंट के कुछ संयोजन और बस डीएफ को प्रिंट करना होता है।
बिल

4
@vishnuviswanath आपने संभवतः इससे पहले मूल डेटाफ़्रेम का एक स्लाइस बनाया है, और फिर उस स्लाइस पर नया कॉलम सेट करने का प्रयास कर रहे हैं। इसके बजाय मूल डेटाफ़्रेम में नया कॉलम जोड़ें और फिर उसके बाद स्लाइस बनाएं। संभवतः जब आप एक डेटाफ़्रेम का एक टुकड़ा बनाते हैं, तो पांडा एक प्रति नहीं बनाता है और किसी तरह इसे मूल डेटाफ़्रेम से प्रबंधित करता है। उस अनुकूलन के साथ इस तरह का खिलवाड़, और इसलिए चेतावनी।
amit_saxena

2
उल्लिखित पांडा की चेतावनी को हल करने के लिए, .copy()इसे उपयोग करने से पहले डेटाफ़्रेम की एक प्रति प्राप्त करें (जब तक कि यह बहुत बड़ा या कुछ या प्रदर्शन वास्तव में मायने नहीं रखता है)।
13

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)। मैं Python 3.0 के साथ JupyterLab का उपयोग कर रहा हूं
ColinMac

2
मेरे लिए ठीक काम करता है। आप महसूस नहीं कर सकते हैं कि insertसंचालित होता है inplace। इसका अर्थ है कि नए डेटा फ़्रेम का मान वापस नहीं किया गया है लेकिन मूल डेटा फ़्रेम को संशोधित कर दिया गया है। इसे आज़माएं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'
  • सम्मिलित करें (स्थान, स्तंभ, मान, allow_duplicates = गलत)

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

    जहाँ तर्क स्थान (0 <= loc <= len (कॉलम)) आपको वह स्तंभ सम्मिलित करने की अनुमति देता है जहाँ आप चाहते हैं।

    'लोक' आपको यह इंडेक्स देता है कि आपका कॉलम प्रविष्टि के बाद होगा । उदाहरण के लिए, स्तंभ नाम 0-वें स्तंभ के रूप में आवेषण उपरोक्त कोड, यानी यह डाला जाएगा से पहले , पहले कॉलम नया पहले कॉलम बन गया। (अनुक्रमण 0 से शुरू होता है)।

ये सभी विधियां आपको एक श्रृंखला से एक नया कॉलम जोड़ने की अनुमति देती हैं (बस श्रृंखला के साथ 'एबीसी' डिफ़ॉल्ट तर्क को प्रतिस्थापित करें)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.