2015-09-20 11 views
12

में एक नए कॉलम पर कॉपी करें यह एक बहुत ही बुनियादी सवाल है, मुझे बस कोई जवाब नहीं मिल रहा है।एक कॉलम में सभी मानों को एक पांडा डेटाफ्रेम

A  B  C 
a.1 b.1 c.1 
a.2 b.2 c.2 
a.3 b.3 c.3 

तब मैं df, जहां स्तंभ 'बी' 'बी .2' के एक मूल्य है से सभी पंक्तियों को निकालें:

मैं इस तरह एक dataframe, df कहा जाता है। मैं इन परिणामों को df_2 पर असाइन करता हूं।

df_2 = df[df['B'] == 'b.2'] 

df_2 हो जाता है:

A  B  C 
a.2 b.2 c.2 

फिर, मैं सभी मूल्यों स्तंभ 'बी' में 'डी' नामक एक नया स्तंभ के लिए नकल। के कारण df_2 बनने के लिए:

A  B  C  D 
a.2 b.2 c.2 b.2 

जब मैं इस तरह एक काम पहिले:

df_2['D'] = df_2['B'] 

मैं निम्नलिखित चेतावनी मिलती है:

एक मूल्य कोशिश कर रहा है की एक प्रति पर स्थापित किया जाना डेटाफ्रेम से एक टुकड़ा। http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy


मैं भी जब इस तरह df_2 बनाने .loc उपयोग करने की कोशिश की है: [row_indexer, col_indexer] = मूल्य .loc उपयोग करने के बजाय

दस्तावेज में चेतावनियां देखें प्रयास करें

df_2 = df.loc[df['B'] == 'b.2'] 

हालांकि, मुझे अभी भी चेतावनी मिलती है।

किसी भी मदद की बहुत सराहना की जाती है।

+0

क्या 'a.1' साधन करता है? क्या यह एक स्ट्रिंग है? –

उत्तर

22

आप बस B नया स्तंभ के लिए, जैसा असाइन कर सकते हैं -

df['D'] = df['B'] 

उदाहरण/डेमो -

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C']) 

In [3]: df 
Out[3]: 
    A B C 
0 a.1 b.1 c.1 
1 a.2 b.2 c.2 
2 a.3 b.3 c.3 

In [4]: df['D'] = df['B']     #<---What you want. 

In [5]: df 
Out[5]: 
    A B C D 
0 a.1 b.1 c.1 b.1 
1 a.2 b.2 c.2 b.2 
2 a.3 b.3 c.3 b.3 

In [6]: df.loc[0,'D'] = 'd.1' 

In [7]: df 
Out[7]: 
    A B C D 
0 a.1 b.1 c.1 d.1 
1 a.2 b.2 c.2 b.2 
2 a.3 b.3 c.3 b.3 
+0

आपने 'डीएफ [' डी '] = डीएफ [' बी '] सही इस्तेमाल किया? आपको वह नहीं मिलना चाहिए, क्या आपने कुछ और किया? –

+3

धन्यवाद! मुझे मिलता है: एक मान डेटाफ्रेम से एक टुकड़ा की एक प्रति पर सेट करने का प्रयास कर रहा है। उपयोग करने का प्रयास करें।loc [row_indexer, col_indexer] = value बदले प्रलेखन में चेतावनी देखें: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df [' डी '] = डीएफ [' बी '] क्या प्रत्येक पंक्ति पर मूल्य खींचने और इसे नए कॉलम में असाइन करना बेहतर होगा? या यह एक गैर मुद्दा है? –

+0

जैसा मैंने कहा था, क्या आपने 'डीएफ [' डी '] = डीएफ [' बी ']' का उपयोग किया था? यदि नहीं तो आपने और क्या उपयोग किया? –

11

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

df_2 = df[df['B'] == 'b.2'].copy() 
+0

यह तय किया गया है! धन्यवाद –

+0

वास्तव में क्या करता है .copy() यहां अलग-अलग हैं? –

+0

.copy() के साथ अंतर यह है कि यह मूल ऑब्जेक्ट के दृश्य के बजाय एक नई वस्तु देता है। तो यदि आप नई वस्तु को बदलते हैं, तो मूल को बदला नहीं जाएगा। – Alex

1

मुझे लगता है कि सही अभिगम विधि सूचकांक उपयोग कर रहा है:

df_2.loc[:,'D'] = df_2['B'] 
+1

यह "SettingWithCopyWarning" बढ़ाएगा –

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