पांडा में एक विशिष्ट कॉलम इंडेक्स पर एक कॉलम कैसे डालूं?


186

क्या मैं पांडा में एक विशिष्ट कॉलम इंडेक्स पर एक कॉलम सम्मिलित कर सकता हूं?

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

यह कॉलम nको अंतिम कॉलम के रूप में रखेगा df, लेकिन क्या शुरुआत में dfइसे बताने का कोई तरीका नहीं है n?


किसी DataFrame की शुरुआत (बाएं छोर) पर एक कॉलम डालें - किसी भी अनुक्रम को सम्मिलित करने के लिए अधिक समाधान + सामान्यीकृत समाधान (न केवल एक स्थिर मान)।
CS95 22

जवाबों:


365

डॉक्स देखें: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html

शुरुआत में = लोकल = 0 का उपयोग करना

df.insert(loc, column, value)

df = pd.DataFrame({'B': [1, 2, 3], 'C': [4, 5, 6]})

df
Out: 
   B  C
0  1  4
1  2  5
2  3  6

idx = 0
new_col = [7, 8, 9]  # can be a list, a Series, an array or a scalar   
df.insert(loc=idx, column='A', value=new_col)

df
Out: 
   A  B  C
0  7  1  4
1  8  2  5
2  9  3  6

18
भविष्य के उपयोगकर्ताओं के लिए, नए पैरामीटर "लोकल", "कॉलम" और "वैल्यू" हैंस्रोत
पीटर मगुइरे

11

आप सूची के रूप में कॉलम निकालने की कोशिश कर सकते हैं, इस पर मालिश करें जैसा आप चाहते हैं, और अपने डेटाफ़्रेम को फिर से जोड़ें:

>>> cols = df.columns.tolist()
>>> cols = [cols[-1]]+cols[:-1] # or whatever change you need
>>> df.reindex(columns=cols)

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

EDIT: यह एक लाइन में किया जा सकता है; हालाँकि, यह थोड़ा बदसूरत लगता है। शायद कुछ क्लीनर प्रस्ताव आ सकता है ...

>>> df.reindex(columns=['n']+df.columns[:-1].tolist())

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

9

यदि आप सभी पंक्तियों के लिए एकल मान चाहते हैं:

df.insert(0,'name_of_column','')
df['name_of_column'] = value

संपादित करें:

आप भी कर सकते हैं:

df.insert(0,'name_of_column',value)

0

यहाँ इसका बहुत ही सरल उत्तर है (केवल एक पंक्ति)।

आप निम्न के रूप में अपने डीएफ में 'एन' कॉलम को जोड़ने के बाद ऐसा कर सकते हैं।

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

df
    l   v   n
0   a   1   0
1   b   2   0
2   c   1   0
3   d   2   0

# here you can add the below code and it should work.
df = df[list('nlv')]
df

    n   l   v
0   0   a   1
1   0   b   2
2   0   c   1
3   0   d   2



However, if you have words in your columns names instead of letters. It should include two brackets around your column names. 

import pandas as pd
df = pd.DataFrame({'Upper':['a','b','c','d'], 'Lower':[1,2,1,2]})
df['Net'] = 0
df['Mid'] = 2
df['Zsore'] = 2

df

    Upper   Lower   Net Mid Zsore
0   a       1       0   2   2
1   b       2       0   2   2
2   c       1       0   2   2
3   d       2       0   2   2

# here you can add below line and it should work 
df = df[list(('Mid','Upper', 'Lower', 'Net','Zsore'))]
df

   Mid  Upper   Lower   Net Zsore
0   2   a       1       0   2
1   2   b       2       0   2
2   2   c       1       0   2
3   2   d       2       0   2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.