Я хочу знайти всі значення у фреймі даних Pandas, які містять пробіл (будь-яку довільну кількість) і замінити ці значення NaN.
Будь-які ідеї, як це можна вдосконалити?
В основному я хочу перетворити це:
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
У це:
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
Мені вдалося це зробити з кодом нижче, але людина це некрасиво. Це не Pythonic, і я впевнений, що це не найефективніше використання панд. Я проходжу цикл через кожен стовпчик і роблю булеву заміну проти маски стовпця, що генерується, застосовуючи функцію, яка здійснює пошук регулярних виразів кожного значення, збігаючись на пробіл.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Його можна трохи оптимізувати, лише повторивши поля, які можуть містити порожні рядки:
if df[i].dtype == np.dtype('object')
Але це не дуже покращення
І, нарешті, цей код встановлює цільові рядки до None, який працює з функціями Pandas, як fillna()
, але було б добре для повноти, якби я міг фактично вставити NaN
безпосередньо замість None
.
replace
регекс ... (можливо, це потрібно запитати як функцію).