पर आधारित डेटाफ्रेम कॉलम में मूल्यों को बदलें मेरे पास एक आसान काम है। 2 कॉलम के साथ डेटाफ्रेम: ए और बी। यदि बी में मान ए में मानों से बड़े होते हैं - उन मानों को ए के मानों से प्रतिस्थापित करें। मैं df.B[df.B > df.A] = df.A
कर ऐसा करने के लिए ऐसा करता था, हालांकि हालिया अपग्रेड ने पांडेस को SettingWithCopyWarning
देना शुरू किया जब इस श्रृंखला का सामना करना पड़ा असाइनमेंट। आधिकारिक दस्तावेज .loc
का उपयोग करने की सिफारिश करता है।स्थिति
ठीक है, मैंने कहा, और df.loc[df.B > df.A, 'B'] = df.A
के माध्यम से किया और यह सब ठीक काम करता है, जब तक कॉलम बी में NaN
के सभी मान नहीं हैं। फिर कुछ अजीब होता है:
In [1]: df = pd.DataFrame({'A': [1, 2, 3],'B': [np.NaN, np.NaN, np.NaN]})
In [2]: df
Out[2]:
A B
0 1 NaN
1 2 NaN
2 3 NaN
In [3]: df.loc[df.B > df.A, 'B'] = df.A
In [4]: df
Out[4]:
A B
0 1 -9223372036854775808
1 2 -9223372036854775808
2 3 -9223372036854775808
अब, अगर भी बी के तत्वों में से एक शर्त (ए से भी बड़ा) को संतुष्ट करता है, तो यह सब ठीक काम करता है:
In [1]: df = pd.DataFrame({'A': [1, 2, 3],'B': [np.NaN, 4, np.NaN]})
In [2]: df
Out[2]:
A B
0 1 NaN
1 2 4
2 3 NaN
In [3]: df.loc[df.B > df.A, 'B'] = df.A
In [4]: df
Out[4]:
A B
0 1 NaN
1 2 2
2 3 NaN
लेकिन अगर बी एस तत्वों में से कोई भी संतुष्ट, उसके बाद सभी NaN
रों प्राप्त -9223372036854775808
साथ बदल देता है:
In [1]: df = pd.DataFrame({'A':[1,2,3],'B':[np.NaN,1,np.NaN]})
In [2]: df
Out[2]:
A B
0 1 NaN
1 2 1
2 3 NaN
In [3]: df.loc[df.B > df.A, 'B'] = df.A
In [4]: df
Out[4]:
A B
0 1 -9223372036854775808
1 2 1
2 3 -9223372036854775808
यह एक बग या एक विशेषता है? मुझे यह प्रतिस्थापन कैसे करना चाहिए?
धन्यवाद!
निश्चित रूप से मेरे लिए एक बग की तरह दिखता है, शायद [https://github.com/pydata/pandas/issues ](https://github.com/pydata/pandas/issues पर रिपोर्ट करने का एक अच्छा विचार है) – Marius