Cách bí mật cột DataFrame chứa chuỗi và NaN
giá trị để nổi. Và có một cột khác có giá trị là chuỗi và phao; làm thế nào để chuyển đổi toàn bộ cột này để nổi.Chuyển đổi chuỗi để nổi trong DataFrame
Trả lời
Bạn có thể thử df.column_name = df.column_name.astype(float)
. Đối với các giá trị NaN
, bạn cần chỉ định cách chúng được chuyển đổi, nhưng bạn có thể sử dụng phương thức .fillna
để thực hiện.
Ví 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])
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
sẽ không thành công; nó cũng loạt bởi loạt 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
Xin lưu ý rằng điều này không hoạt động đối với các cột (tại multiindex leadt), chỉ hoạt động cho các giá trị trong khung dữ liệu – denfromufa
Tôi đã phải sử dụng set_levels để chuyển đổi chuỗi thành float – denfromufa
sau đó bạn đang làm điều gì sai . chuyển đổi chuỗi thành phao là hành động của người dùng bùng nổ. – Jeff
df['MyColumnName'] = df['MyColumnName'].astype('float64')
Điều này không hoạt động khi chuyển đổi từ Chuỗi thành Float: 'ValueError: không thể chuyển đổi chuỗi thành float: 'date '' – Jack
Trong một phiên bản mới hơn của gấu trúc (0,17 trở lên), bạn có thể sử dụng chức năng 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ý nội dung 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')
Để áp dụng' pd.to_numeric' vào '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] (https://stackoverflow.com/a/34844867/604687). – Ninjakannon
KHÔNG SỬ DỤNG ** 'conversion_objects' **. Nó không được chấp nhận. Hãy sử dụng 'to_numeric' hoặc' astype' thay vì –