2015-09-02 7 views
5

मेरे पास दो कॉलम के साथ एक पांडा डेटाफ्रेम है: x और value। मैं उन सभी पंक्तियों को ढूंढना चाहता हूं जहां x == 10, और इन सभी पंक्तियों के लिए मूल्य = 1,000 सेट करें। मैं नीचे दिए गए कोड की कोशिश की, लेकिन मैं चेतावनी है किपायथन पांडा: जंजीर असाइनमेंट से बचने के लिए कैसे करें

A value is trying to be set on a copy of a slice from a DataFrame. 

मैं समझता हूँ कि मैं .loc या .ix का उपयोग करके इस से बच सकते हैं मिलता है, लेकिन मैं पहले स्थान या सभी पंक्तियों जो पूरा का सूचकांक खोजने की आवश्यकता होगी एक्स == 10 की मेरी हालत। क्या कोई और सीधा तरीका है?

धन्यवाद!

import numpy as np 
import pandas as pd 

df=pd.DataFrame() 
df['x']=np.arange(10,14) 
df['value']=np.arange(200,204) 


print df 

df[ df['x']== 10 ]['value'] = 1000 # this doesn't work 

print df 
+2

क्षमा करें 'df.loc [df [' x '] == 10,' value '] = 1000' का उपयोग करने में क्या गलत है? – EdChum

+1

धन्यवाद, मुझे एहसास नहीं हुआ कि यह एक विकल्प था। शायद यह सिर्फ मुझे है, शायद ऐसा इसलिए है क्योंकि मैं भी एसक्यूएल के लिए उपयोग किया जाता हूं और पांडों के लिए बहुत नया हूं, लेकिन मुझे अभी भी पता चलता है कि कुछ कार्यों जो एसक्यूएल में हैं, पांडा में गन्दा हैं, और दस्तावेज बहुत स्पष्ट नहीं है –

+0

[डॉक्स] (http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy) बहुत स्पष्ट हैं और चेतावनी आपको यह बताने के लिए है कि आप जो कर रहे हैं वह काम नहीं कर सकता – EdChum

उत्तर

3

आप loc का उपयोग करना चाहिए सुनिश्चित करने के लिए आप एक दृश्य पर काम कर रहे हैं, अपने उदाहरण पर निम्नलिखित काम करते हैं और नहीं होगा एक चेतावनी बढ़ा:

df.loc[df['x'] == 10, 'value'] = 1000 

तो सामान्य रूप है:

df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like> 

docs त्रुटियों को हाइलाइट करता है और intro है, कुछ फ़ंक्शन दस्तावेज़ स्पैस हैं, सुधार सबमिट करने में संकोच न करें।

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