डेटाफ़्रेम में खाली कॉलम कैसे जोड़ें?


260

पांडा कॉलम में खाली कॉलम जोड़ने का सबसे आसान तरीका क्या है DataFrame? सबसे अच्छा मैं ठोकर खाई है कुछ की तरह है

df['foo'] = df.apply(lambda _: '', axis=1)

क्या कम विकृत विधि है?


2
क्या आप वास्तव में एक तार चाहते हैं जिसमें खाली तार या बल्कि हैं N/A?
फिल्मकार

जवाबों:


419

अगर मैं सही तरीके से समझूं तो असाइनमेंट भरना चाहिए:

>>> 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

2
इस जवाब ने मेरे लिए सिर्फ नई पंक्तियाँ बनाईं।
लॉजिकबल्के

@logicbloke क्या आप एक उदाहरण प्रदान कर सकते हैं कि यह कहाँ हो रहा है?
क्रेयमिकेल

@ क्रैमिकलम कुछ समय हो गया है, लेकिन मेरा मानना ​​है कि मेरे पास बिना नाम वाले पंक्तियों के साथ संख्या-अनुक्रमित कॉलम थे और इसने अंत में एक नई पंक्ति बनाई।
लॉजिकब्लोके

1
तो dfखाली है, आप उपयोग कर सकते हैं df['new'] = pd.Series() (नीचे मेरा उत्तर देखें)
कार्स्टन

कैसे कई खाली कॉलम जोड़ने के लिए?
एम। राजकोषीय

46

इस संबद्ध प्रश्न पर डीएसएम के उत्तर और भवन को जोड़ने के लिए , मैं दृष्टिकोण को दो मामलों में विभाजित करूंगा:

  • एकल कॉलम जोड़ना: नए कॉलमों के लिए रिक्त मान निर्दिष्ट करें, जैसे df['C'] = np.nan

  • कई कॉलम जोड़ना: मेरा सुझाव होगा कि डेटाफ़्रेम के कॉलम इंडेक्स में नए कॉलम जोड़ने के लिए .reindex(columns=[...]) पांडा की विधि का उपयोग करें । यह कई नई पंक्तियों को जोड़ने के लिए भी काम करता है .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

आप हमेशा मौजूदा डेटाफ़्रेम के लिए एक नया (खाली) डेटाफ़्रेम भी ले सकते हैं, लेकिन यह आपके लिए pythen के रूप में महसूस नहीं करता है :)


3
version >= 0.20.0DataFrame को हटाने के लिए उदाहरण और पंक्तियों के रूप में नए कॉलम जोड़ता है। version < 0.20.0पंडों संस्करण पर ठीक काम करने के लिए उदाहरण0.24.1
लालो

@emunsing इस प्रश्न का उत्तर खोजते हुए, मैंने अंततः आपके उत्तर को उपयोगी पाया। हालाँकि, पहले यह मेरे लिए काम नहीं कर रहा था क्योंकि पंडों को इसमें आवश्यकता , axis=1थी version = 0.25। मैंने अपडेट किए गए संस्करण को शामिल करने के लिए आपके उत्तर को संशोधित करने का प्रयास किया, लेकिन मुझे @kenlukas और @il_raffa द्वारा अस्वीकार कर दिया गया। मुझे उम्मीद है कि हर कोई यह समझने के लिए संघर्ष कर रहा है कि आपकी प्रतिक्रिया उनके लिए काम क्यों नहीं कर रही है - जैसे कि मैं था - कम से कम इस टिप्पणी के पार आता है।
ग्रिफ़

@Griff - मैंने अब संस्करण संगतता के मुद्दों के बारे में अधिक सटीक और स्पष्ट होने के लिए अपना उत्तर अपडेट किया है। इसे उजागर करने के लिए धन्यवाद।
इम्यूनिंग

35

एक और भी सरल समाधान है:

df = df.reindex(columns = header_list)                

जहाँ "शीर्षलेख_सूची" उन शीर्ष लेखों की एक सूची है जिन्हें आप दिखाना चाहते हैं।

सूची में शामिल कोई भी शीर्ष लेख जो पहले से ही डेटाफ़्रेम में नहीं पाया जाता है, नीचे रिक्त कक्षों के साथ जोड़ा जाएगा।

तो अगर

header_list = ['a','b','c', 'd']

फिर c और d को रिक्त कोशिकाओं वाले कॉलम के रूप में जोड़ा जाएगा


2
अधिक सटीक रूप से, कॉलम को NaN के साथ जोड़ा जाएगा।
ब्रोकली

19

के साथ शुरू v0.16.0, एक DF.assign()करने के लिए नए कॉलम ( एकल / एकाधिक ) आवंटित करने के लिए इस्तेमाल किया जा सकता है DF। इन स्तंभों के अंत में वर्णानुक्रम में डाला जाता है DF

यह उन मामलों में सरल असाइनमेंट की तुलना में लाभप्रद है, जिनमें आप लौटे डेटाफ़्रेम पर सीधे जंजीर संचालन की एक श्रृंखला करना चाहते हैं।

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वर्तमान में ऑपरेशन का समर्थन नहीं करता है ।


सी के लिए वह डेटाटाइप क्या है? मैं तार की एक सूची के माध्यम से पाशन से जोड़ने की कोशिश कर रहा हूँ। लेकिन इसका उपयोग नहीं करता है।
एलिजोन्मार्क

12

मुझे पसंद है:

df['new'] = pd.Series(dtype='your_required_dtype')

यदि आपके पास एक खाली डेटाफ़्रेम है, तो यह समाधान सुनिश्चित करता है कि कोई नई पंक्ति नहीं है जिसमें केवल NaNजोड़ा गया है।

यदि dtypeनिर्दिष्ट नहीं किया गया है, तो नए पंडस संस्करण एक उत्पादन करते हैं DeprecationWarning



4

@ कई स्तंभों को जोड़ने के लिए इम्यूनिंग का उत्तर वास्तव में अच्छा है, लेकिन मैं इसे अजगर 2.7 में काम करने के लिए नहीं मिला। इसके बजाय, मुझे यह काम मिला:

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])

1

नीचे दिए गए कोड में यह सवाल है कि "मैं अपने मौजूदा डेटाफ़्रेम में रिक्त कॉलमों की संख्या को कैसे जोड़ूँ"। एक ही स्थान पर समान समस्याओं के समाधान रखने के हित में, मैं इसे यहां जोड़ रहा हूं।

1 दृष्टिकोण (1-64 से स्तंभ नामों के साथ 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 (1-64 से स्तंभ नामों के साथ 64 अतिरिक्त कॉलम बनाने के लिए)

df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')

1

तुम कर सकते हो

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 

1

एक df.insert(index_to_insert_at, column_header, init_value)विशिष्ट सूचकांक में नए कॉलम को सम्मिलित करने के लिए उपयोग किया जा सकता है ।

cost_tbl.insert(1, "col_name", "") 

उपरोक्त विवरण पहले कॉलम के बाद एक खाली कॉलम सम्मिलित करेगा।

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