как удалить ячейки в фрейме данных без номера в Python?
Я пытаюсь удалить ячейки из своего DataFarme, который содержит только символы
Я хочу удалить такие ячейки, как Фарнет, и сделать их нулевыми.
на самом деле я проверяю некоторые ссылки, такие как это, но он не ответил на мой вопрос, так как я хочу манипулировать ячейками
Я предполагаю, что OP хочет, чтобы только эти две ячейки были пустыми или заменены на None
Просьба размещать образцы в тегах кода как текст, а не в виде изображения @ f.a
да @ Рахул, ваше утверждение верно






Я считаю, что вам нужно:
df = pd.DataFrame({0:['a','DT8510','AFT1',np.nan],
1:['a','DT8510','u','as1']})
print (df)
0 1
0 a a
1 DT8510 DT8510
2 AFT1 u
3 NaN as1
import re
d = re.compile('\d')
df = df.applymap(lambda x: x if d.search(str(x)) else np.nan)
print (df)
0 1
0 NaN NaN
1 DT8510 DT8510
2 AFT1 NaN
3 NaN as1
Другое решение:
df = df.where(df.apply(lambda x: x.astype(str).str.contains('\d')))
Большое спасибо, ваше решение сработало, но не могли бы вы объяснить его подробнее, а также помочь мне удалить тот, в котором меньше 4 чисел?
@ f.a - так удалили 'AFT1', потому что только один номер?
@ f.a - потом поменять \d на \d{4}
Большое спасибо, еще один вопрос, на самом деле я пытаюсь извлечь шаблон, как показано ниже: T1370, строка, которая начинается с B, H, N, T, E и имеет четыре числа после, и опускает все, что идет после или до нее, и извлекает как многие могут быть извлечены в одной ячейке.
@ f.a - использовать '^[BHNTE]{1}\d{4}$'
спасибо Дело в том, что он полностью удалит первые ячейки UH1744, но я хотел бы удалить только U из этой строки, кроме того, я хочу, чтобы E1780T8126 был разделен, а не удалял их полностью.
Аналогичное решение для @jezrael
import pandas as pd
import numpy as np
df = pd.DataFrame(data = {'A':['1','textonly'],'B':['textandnum2','2']})
for column in df.columns:
df[column][~df[column].str.contains('([1-9])')] = np.nan
df
Я думаю, вы можете использовать регулярное выражение для поиска ячеек, у которых нет номера.
^ ([^ 0-9] *) $ выражение найдет все ячейки без чисел.
df = df.replace(r'^([^0-9]*)$', np.nan, regex=True)
Это заменит все ячейки числами с NaN, а затем вы сможете использовать dropna для удаления ячеек.
df = df.dropna()
Надеюсь, это поможет.
кажется, вывод df.replace не является dataFrame, так как ни один из приведенных ниже кодов не работает, и я получаю ниже error AttributeError: 'NoneType' object has no attribute 'dropna', и это также не работает df.to_csv("s1.csv", sep=',')
Теперь вы можете попробовать. Он должен работать. Я обновил регулярное выражение и удалил inplace = True.
Итак, строка с
E2151 A Farnet T3886отбрасывается, потому чтоAи потому чтоFarnet?