2013-05-01 10 views
100

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

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

क्या कोई कम प्रतिकूल विधि है?

+0

आप वास्तव में एक स्तंभ रिक्त स्ट्रिंग या बल्कि 'N/A' युक्त करना चाहते हैं? – filmor

उत्तर

153

अगर मैं सही ढंग से समझ, असाइनमेंट भरना चाहिए:

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

क्या आप मुझे समझा सकते हैं कि IIUC क्या है? – lmiguelvargasf

+8

@lmiguelvargasf यह 'अगर मैं सही ढंग से समझता हूं' के लिए छोटा है – einonm

16

this associated question पर डीएसएम के जवाब और निर्माण करने के लिए जोड़ने के लिए, मैं दो मामलों में दृष्टिकोण विभाजित हैं:

  • एक भी जोड़ा जा रहा है कॉलम: बस नए कॉलम में रिक्त मान असाइन करें, उदाहरण के लिए df['C'] = np.nan

  • एकाधिक स्तंभों जोड़ना: मैं .reindex(columns=[...])method of pandas dataframe के स्तंभ अनुक्रमणिका में नए कॉलम जोड़ के लिए उपयोग करने का सुझाव चाहते हैं। यह कई नई पंक्तियों को जोड़ने के लिए भी काम करता है।

यहाँ एक उदाहरण एकाधिक स्तंभों को जोड़ने है:

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2']) # version >= 0.20.0 

या

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2']) # version < 0.20.0 

आप कभी भी मौजूदा dataframe के लिए एक नया (खाली) dataframe जोड़ सकते हैं, लेकिन है कि 'नहीं करता है मुझे मेरे लिए पाइथोनिक महसूस नहीं है :)

5

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

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

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 नमूना @DSM द्वारा प्रदर्शन पर विचार करें। मूल DF के अनुसार संशोधित रूप से संशोधित करने के लिए, इसे df = df.assign(...) जैसे उपयोग करें क्योंकि यह वर्तमान में inplace ऑपरेशन का समर्थन नहीं करता है।

+0

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

2

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

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

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

df = df.reindex(columns = header_list)     

जहां "header_list" हेडर आप दिखाना चाहते हैं की एक सूची है।

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

इसलिए यदि

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

तो ग और घ खाली कोशिकाओं के साथ स्तंभों के रूप में जोड़ दिया जाएगा

+0

अधिक सटीक, कॉलम NaNs के साथ जोड़े जाएंगे। – broccoli2000

संबंधित मुद्दे