Câu trả lời:
LƯU Ý:
pd.convert_objects
hiện đã không được dùng nữa. Bạn nên sử dụngpd.Series.astype(float)
hoặcpd.to_numeric
như được mô tả trong các câu trả lời khác.
Điều này có sẵn trong 0,11. Buộc chuyển đổi (hoặc đặt thành nan) Điều này sẽ hoạt động ngay cả khi astype
thất bại; nó cũng là chuỗi theo chuỗi vì vậy nó sẽ không chuyển đổi nói một cột chuỗi hoàn chỉnh
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
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)
Bạn có thể chuyển đổi chỉ một cột.
Bạn có thể thử df.column_name = df.column_name.astype(float)
. Đối với các NaN
giá trị, bạn cần chỉ định cách chúng nên được chuyển đổi, nhưng bạn có thể sử dụng .fillna
phương pháp để thực hiện.
Thí dụ:
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])
Trong phiên bản gấu trúc mới hơn (0,17 trở lên), bạn có thể sử dụng hàm to_numeric . Nó cho phép bạn chuyển đổi toàn bộ khung dữ liệu hoặc chỉ các cột riêng lẻ. Nó cũng cung cấp cho bạn khả năng chọn cách xử lý những thứ không thể chuyển đổi thành giá trị số:
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')
pd.to_numeric
cho a DataFrame
, người ta có thể sử dụng df.apply(pd.to_numeric)
như được giải thích chi tiết trong câu trả lời này .
df['MyColumnName'] = df['MyColumnName'].astype('float64')
ValueError: could not convert string to float: 'date'
bạn phải thay thế chuỗi rỗng ('') bằng np.nan trước khi chuyển đổi thành float. I E:
df['a']=df.a.replace('',np.nan).astype(float)
Đây là một ví dụ
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
nhưng nếu đây là tất cả các giá trị chuỗi ... như trong trường hợp của tôi ... Chuyển đổi các cột mong muốn thành float:
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)
Khung dữ liệu của bạn bây giờ sẽ có các giá trị float :-)
convert_objects
. Nó không được dùng nữa. Sử dụngto_numeric
hoặcastype
thay