मेरे पास मिश्रित प्रकार के स्तंभों के साथ एक पांडा डेटाफ़्रेम है, और मैं कुछ स्तंभों में स्केलेर के min_max_scaler को लागू करना चाहूंगा। आदर्श रूप में, मैं इन परिवर्तनों को जगह में करना चाहूंगा, लेकिन अभी तक ऐसा करने का कोई तरीका नहीं निकला है। मैंने निम्नलिखित कोड लिखा है जो काम करता है:
import pandas as pd
import numpy as np
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']})
min_max_scaler = preprocessing.MinMaxScaler()
def scaleColumns(df, cols_to_scale):
for col in cols_to_scale:
df[col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest[col])),columns=[col])
return df
dfTest
A B C
0 14.00 103.02 big
1 90.20 107.26 small
2 90.95 110.35 big
3 96.27 114.23 small
4 91.21 114.68 small
scaled_df = scaleColumns(dfTest,['A','B'])
scaled_df
A B C
0 0.000000 0.000000 big
1 0.926219 0.363636 small
2 0.935335 0.628645 big
3 1.000000 0.961407 small
4 0.938495 1.000000 small
मुझे उत्सुकता है कि क्या यह परिवर्तन करने के लिए पसंदीदा / सबसे कुशल तरीका है। वहाँ एक तरह से मैं df.apply का उपयोग कर सकता है कि बेहतर होगा?
मुझे आश्चर्य है कि मुझे काम करने के लिए निम्न कोड नहीं मिल सकता है:
bad_output = min_max_scaler.fit_transform(dfTest['A'])
अगर मैं स्केलर को पूरा डाटाफ्रेम पास करता हूं तो यह काम करता है:
dfTest2 = dfTest.drop('C', axis = 1)
good_output = min_max_scaler.fit_transform(dfTest2)
good_output
मैं उलझन में हूं कि स्केलर के लिए एक श्रृंखला पास करना क्यों विफल हो गया। ऊपर मेरे पूर्ण काम करने वाले कोड में मैंने स्केलर को एक श्रृंखला पास करने की उम्मीद की थी, फिर डेटाफ्रेम कॉलम = स्केल की गई श्रृंखला में सेट किया। मैंने देखा है कि यह प्रश्न कुछ अन्य स्थानों पर पूछा गया है, लेकिन इसका अच्छा उत्तर नहीं मिला है। किसी भी मदद को समझने के लिए यहाँ क्या हो रहा है बहुत सराहना की जाएगी!
bad_output = in_max_scaler.fit_transform(dfTest['A'].values)
या तो काम नहीं किया। @larsmans - हाँ, मैं इस मार्ग के नीचे जाने के बारे में सोचा था, यह सिर्फ एक परेशानी की तरह लगता है। मुझे नहीं पता कि यह एक बग है या नहीं कि पंडों ने एक स्केलेर फ़ंक्शन को पूर्ण डेटाफ़्रेम पास किया है, लेकिन श्रृंखला नहीं। एक डेटाफ्रेम के बारे में मेरी समझ यह थी कि यह एक श्रंखला है। "पायथन फॉर डेटा एनालिसिस" पुस्तक में पढ़ते हुए, यह बताता है कि नुप्पा के शीर्ष पर पंडों का निर्माण किया गया है ताकि न्यूमपी-केंद्रित अनुप्रयोगों में उपयोग करना आसान हो सके।
bad_output = min_max_scaler.fit_transform(dfTest['A'].values)
?values
विशेषता तक पहुँचने के लिए एक सुव्यवस्थित सरणी देता है, किसी कारण से कभी-कभी शिकंजी एप आपी को सही तरीके से सही तरीके से कॉल करेगा जो पांडा को एक सुपीरियर सरणी देता है और कभी-कभी ऐसा नहीं करता है।