зацикливание значений, основанных на условии - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь создать функцию в Python, которая проверяет, соответствуют ли данные в фрейме данных определенной структуре, в моем случае мне нужно убедиться, что столбец id имеет такую ​​структуру, как ID0101-10

здесьмой код, но он не работает, я получаю ошибку индексации:

i = 0 
for i in df["id"]:
    if ('-' in df["id"]):
        df["id"].iloc[i] = df["id"].iloc[i]
        i += 1
    else:
        df.drop(df["id"].iloc[i])
        i += 1

if you're curious about my data, its like this:
id            name 
ID0101-10     John    
ID0101-11     Mary 
8454          Test
MMMM          MMMM
ID0101-01     Ben
MN87876       00.00

Я пытаюсь очистить свои данные, отбрасывая фиктивные значения

РЕДАКТИРОВАТЬ: я получаю эту ошибку TypeError: Невозможно индексировать по индексу местоположения с не-целая клавиша

Спасибо за помощь, спасибо

1 Ответ

2 голосов
/ 24 октября 2019

Если я правильно понимаю, вы можете сделать это:

import pandas as pd

df = pd.DataFrame({'id':['ID0101-10', 'ID0101-11', '8454', 'MMMM', 'ID0101-01', 'MN87876'],
                   'name':['John', 'Mary', 'Test', 'MMMM', 'Ben', '00.00']})

result = df[df['id'].str.startswith('ID0101-')]

print(result)

Вывод:

          id  name
0  ID0101-10  John
1  ID0101-11  Mary
4  ID0101-01   Ben

Как правило, вам редко нужно перебирать кадры данных панд, это почти всегдабыстрее использовать собственные функции панд.

Для более сложных совпадений вы можете использовать регулярные выражения: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.match.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...