ডেটা ফ্রেমে স্ট্রিংগুলিকে ফ্লোটে রূপান্তর করা


112

স্ট্রিং এবং ভাসমানের NaNমানগুলি সহ কোনও ডেটা ফ্রেম কলাম কীভাবে গোপন করবেন । এবং আরও একটি কলাম রয়েছে যার মানগুলি স্ট্রিং এবং ভাসমান; কীভাবে এই পুরো কলামটিকে ফ্লোটে রূপান্তর করতে হবে।


7
ব্যবহার করবেন না convert_objects। এটি হ্রাস করা হয়। ব্যবহার করুন to_numericবা astypeপরিবর্তে
টেড পেট্রো

উত্তর:


72

দ্রষ্টব্য: pd.convert_objects এখন অবচয় করা হয়েছে। আপনার অন্যান্য উত্তরগুলিতে বর্ণিত pd.Series.astype(float)বা ব্যবহার করা উচিত pd.to_numeric

এটি 0.11 এ উপলব্ধ। জোর করে রূপান্তর (বা সেট করতে হবে ন্যান) এটি astypeব্যর্থ হবে তখনও কাজ করবে; এটি সিরিজ অনুসারে সিরিজও যাতে এটি সম্পূর্ণ স্ট্রিং কলামকে রূপান্তরিত করে না

In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo'])))

In [11]: df
Out[11]: 
     A    B
0  1.0  1.0
1    1  foo

In [12]: df.dtypes
Out[12]: 
A    object
B    object
dtype: object

In [13]: df.convert_objects(convert_numeric=True)
Out[13]: 
   A   B
0  1   1
1  1 NaN

In [14]: df.convert_objects(convert_numeric=True).dtypes
Out[14]: 
A    float64
B    float64
dtype: object

দয়া করে নোট করুন যে এটি কলামগুলির জন্য কাজ করে না (লেড্ট মাল্টিইন্ডেক্সে), কেবল ডেটাফ্রেমের মানগুলির জন্য কাজ করে
ডেনফ্রুমুফা

1
স্ট্রিংটিকে ফ্লোটে রূপান্তর করতে আমাকে set_levels ব্যবহার করতে হয়েছিল
denfromufa

16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)আপনি কেবল একটি একক কলাম রূপান্তর করতে পারেন।
জ্যাক

19
এটি এখন নতুন সংস্করণে pd.to_numeric (কল)
জেফ

11
রূপান্তর_অবজেক্টগুলি আরও নতুন পান্ডায় অবহিত করা হয়েছে। ডেটা-টাইপ নির্দিষ্ট রূপান্তরকারীগুলি pd.to_numeric ব্যবহার করুন।
টমাস ম্যাথু

57

আপনি চেষ্টা করতে পারেন df.column_name = df.column_name.astype(float)। হিসাবে NaNমূল্যবোধ, আপনি তা কিভাবে রূপান্তরিত করা তা নির্দিষ্ট করতে আপনাকে প্রয়োজন, কিন্তু আপনি ব্যবহার করতে পারেন .fillnaএটা করতে পদ্ধতি।

উদাহরণ:

In [12]: df
Out[12]: 
     a    b
0  0.1  0.2
1  NaN  0.3
2  0.4  0.5

In [13]: df.a.values
Out[13]: array(['0.1', nan, '0.4'], dtype=object)

In [14]: df.a = df.a.astype(float).fillna(0.0)

In [15]: df
Out[15]: 
     a    b
0  0.1  0.2
1  0.0  0.3
2  0.4  0.5

In [16]: df.a.values
Out[16]: array([ 0.1,  0. ,  0.4])

47

পান্ডাসের নতুন সংস্করণে (0.17 এবং তার বেশি), আপনি টু_নামারিক ফাংশনটি ব্যবহার করতে পারেন । এটি আপনাকে পুরো ডেটাফ্রেমে বা কেবল স্বতন্ত্র কলামগুলিতে রূপান্তর করতে দেয়। এটি আপনাকে এমন উপাদানগুলির সাথে কীভাবে আচরণ করতে হয় যা সংখ্যাসূচক মানগুলিতে রূপান্তরিত করা যায় না তা নির্বাচন করার ক্ষমতাও দেয়:

import pandas as pd
s = pd.Series(['1.0', '2', -3])
pd.to_numeric(s)
s = pd.Series(['apple', '1.0', '2', -3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')

32
ক প্রয়োগ pd.to_numericকরতে DataFrame, এই উত্তরে বিস্তারিতভাবে বর্ণিতdf.apply(pd.to_numeric) হিসাবে ব্যবহার করতে পারেন ।
নিনজাকাননন

31
df['MyColumnName'] = df['MyColumnName'].astype('float64') 

6
স্ট্রিং থেকে ফ্লোটে রূপান্তর করার সময় এটি কাজ করে না:ValueError: could not convert string to float: 'date'
জ্যাক

@ জ্যাক আপনি কি এখানে কাজটি জানেন? আমি স্ট্রিংকে ফ্লোটে রূপান্তর করতে এই সঠিক সমস্যার মধ্যে চলেছি।
হাট

@ হ্যাট আমি একই সমস্যার মুখোমুখি হচ্ছি। আপনি কি এর সমাধান খুঁজে পেয়েছেন?
প্রখর ঝুদলে

@ জ্যাক আমি নিশ্চিত নই তবে আপনি ডেট ফর্ম্যাট এবং ভাসমান মিশ্রিত বলে মনে করছেন। # ডেটটাইম ডিএফ-তে রূপান্তর করুন ['তারিখ'] = পিডি টু_ডেটটাইম (ডিএফ ['তারিখ'])
ক্লড

8

ফ্লোতে রূপান্তর করার আগে আপনাকে খালি স্ট্রিং ('') এনপি.নান দিয়ে প্রতিস্থাপন করতে হবে। অর্থাৎ,

df['a']=df.a.replace('',np.nan).astype(float)

1

এখানে একটি উদাহরণ

                            GHI             Temp  Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:01:00 -7.99999952505459e-7    18.2    0   NaN
2016-03-15 06:02:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:03:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:04:00 -7.99999952505459e-7    18.3    0   NaN

তবে এটি যদি সমস্ত স্ট্রিং মান হয় ... আমার ক্ষেত্রে যেমনটি ছিল ... কাঙ্ক্ষিত কলামগুলিকে ফ্লোটে রূপান্তর করুন:

df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)

আপনার ডেটাফ্রেমে এখন ভাসমান মান থাকবে :-)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.