Я хочу найти все значения в кадре данных 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
с регулярным выражением ... (возможно, это следует запрашивать как функцию).