Как удалить ячейки в фрейме данных без номера в Python?

как удалить ячейки в фрейме данных без номера в Python?

Я пытаюсь удалить ячейки из своего DataFarme, который содержит только символы

Как удалить ячейки в фрейме данных без номера в Python?

Я хочу удалить такие ячейки, как Фарнет, и сделать их нулевыми.

на самом деле я проверяю некоторые ссылки, такие как это, но он не ответил на мой вопрос, так как я хочу манипулировать ячейками

Итак, строка с E2151 A Farnet T3886 отбрасывается, потому что A и потому что Farnet?

jezrael 06.12.2018 14:59

Я предполагаю, что OP хочет, чтобы только эти две ячейки были пустыми или заменены на None

Rahul Agarwal 06.12.2018 15:01

Просьба размещать образцы в тегах кода как текст, а не в виде изображения @ f.a

RavinderSingh13 06.12.2018 15:02

да @ Рахул, ваше утверждение верно

f.a 06.12.2018 15:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
864
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я считаю, что вам нужно:

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 06.12.2018 15:34

@ f.a - так удалили 'AFT1', потому что только один номер?

jezrael 06.12.2018 15:37

@ f.a - потом поменять \d на \d{4}

jezrael 06.12.2018 15:40

Большое спасибо, еще один вопрос, на самом деле я пытаюсь извлечь шаблон, как показано ниже: T1370, строка, которая начинается с B, H, N, T, E и имеет четыре числа после, и опускает все, что идет после или до нее, и извлекает как многие могут быть извлечены в одной ячейке.

f.a 06.12.2018 15:52

@ f.a - использовать '^[BHNTE]{1}\d{4}$'

jezrael 06.12.2018 16:00

спасибо Дело в том, что он полностью удалит первые ячейки UH1744, но я хотел бы удалить только U из этой строки, кроме того, я хочу, чтобы E1780T8126 был разделен, а не удалял их полностью.

f.a 06.12.2018 16:50

Аналогичное решение для @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=',')

f.a 06.12.2018 15:24

Теперь вы можете попробовать. Он должен работать. Я обновил регулярное выражение и удалил inplace = True.

sufi 06.12.2018 15:54

Другие вопросы по теме