Tôi có một khung dữ liệu 227x4 với tên quốc gia và giá trị số để làm sạch (wrangle?).Làm thế nào để thay thế 'chuỗi bất kỳ' bằng nan trong gấu trúc DataFrame bằng cách sử dụng mặt nạ boolean?
Dưới đây là một khái niệm trừu tượng của DataFrame:
import pandas as pd
import random
import string
import numpy as np
pdn = pd.DataFrame(["".join([random.choice(string.ascii_letters) for i in range(3)]) for j in range (6)], columns =['Country Name'])
measures = pd.DataFrame(np.random.random_integers(10,size=(6,2)), columns=['Measure1','Measure2'])
df = pdn.merge(measures, how= 'inner', left_index=True, right_index =True)
df.iloc[4,1] = 'str'
df.iloc[1,2] = 'stuff'
print(df)
Country Name Measure1 Measure2
0 tua 6 3
1 MDK 3 stuff
2 RJU 7 2
3 WyB 7 8
4 Nnr str 3
5 rVN 7 4
Làm thế nào để thay thế các giá trị chuỗi với np.nan
trong tất cả các cột mà không cần chạm tên nước?
tôi đã cố gắng sử dụng một mặt nạ boolean:
mask = df.loc[:,measures.columns].applymap(lambda x: isinstance(x, (int, float))).values
print(mask)
[[ True True]
[ True False]
[ True True]
[ True True]
[False True]
[ True True]]
# I thought the following would replace by default false with np.nan in place, but it didn't
df.loc[:,measures.columns].where(mask, inplace=True)
print(df)
Country Name Measure1 Measure2
0 tua 6 3
1 MDK 3 stuff
2 RJU 7 2
3 WyB 7 8
4 Nnr str 3
5 rVN 7 4
# this give a good output, unfortunately it's missing the country names
print(df.loc[:,measures.columns].where(mask))
Measure1 Measure2
0 6 3
1 3 NaN
2 7 2
3 7 8
4 NaN 3
5 7 4
tôi đã xem xét một số câu hỏi liên quan đến mỏ ([1], [2], [3], [4], [5], [6], [7], [8]), nhưng không thể tìm thấy một đã trả lời sự quan tâm của tôi.
"Một meta-câu hỏi, là nó bình thường mà tôi Tôi mất hơn 3 giờ để xây dựng một câu hỏi ở đây (bao gồm cả nghiên cứu)? " - Vâng. Thành công của [so] và toàn bộ mạng Stack Exchange được dựa trên chất lượng cao của nội dung, cả câu hỏi và câu trả lời. Bạn không thể ném cùng một câu hỏi chất lượng cao trong một vài phút. Cá nhân, tôi đặt nỗ lực cần thiết nhiều hơn vào thứ tự của ngày hơn giờ. Tôi chắc chắn đã dành cả ngày hoặc nhiều hơn cho một câu trả lời, và tôi hy vọng người yêu cầu phải dành ít nhất một đơn đặt hàng nhiều nỗ lực hơn, vì anh ta là người nhận được lợi ích. –
Lưu ý phụ: các câu hỏi meta phải được hỏi trên [meta]. –
@ JörgWMittag Tôi chỉ đếm thời gian để viết câu hỏi sau khi tôi đã tự mình cố gắng. Nếu tôi phải tính rằng nó sẽ là trong những ngày thực sự. Tôi sẽ đặt câu hỏi trong meta khi tôi có thêm vài giờ nữa trước mặt tôi. Tôi cảm thấy ngớ ngẩn mất quá nhiều thời gian để hỏi câu hỏi của tôi. Nhưng bây giờ tôi cảm thấy tốt hơn và chất lượng của câu trả lời là bằng chứng cho thấy nó cũng đáng để nỗ lực. Cảm ơn bạn! –