Tôi muốn tìm tất cả các giá trị trong khung dữ liệu Pandas có chứa khoảng trắng (bất kỳ số lượng tùy ý nào) và thay thế các giá trị đó bằng NaN.
Bất kỳ ý tưởng làm thế nào điều này có thể được cải thiện?
Về cơ bản tôi muốn biến điều này:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
Vào đây:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
Tôi đã quản lý để làm điều đó với mã dưới đây, nhưng con người thật xấu xí. Đó không phải là Pythonic và tôi chắc chắn đó cũng không phải là cách sử dụng gấu trúc hiệu quả nhất. Tôi lặp qua từng cột và thực hiện thay thế boolean bằng mặt nạ cột được tạo bằng cách áp dụng hàm thực hiện tìm kiếm regex của từng giá trị, khớp trên khoảng trắng.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Nó có thể được tối ưu hóa một chút bằng cách chỉ lặp qua các trường có thể chứa các chuỗi trống:
if df[i].dtype == np.dtype('object')
Nhưng đó không phải là một cải tiến nhiều
Và cuối cùng, mã này đặt các chuỗi mục tiêu thành Không, hoạt động với các chức năng của Pandas như thế fillna()
, nhưng sẽ rất tuyệt nếu tôi thực sự có thể chèn NaN
trực tiếp thay vì None
.
replace
với regex ... (có lẽ điều này nên được yêu cầu như một tính năng).