Правильный способ тестирования значений в панде и изменения их - PullRequest
0 голосов
/ 10 июля 2019

Мне нужно изменить некоторые значения кадра данных Pandas на основе теста и оставить другие значения без изменений.Мне также нужно оставить порядок строк без изменений.

У меня есть рабочий код, основанный на итерации строк в фрейме данных.Но это ужасно медленно.Есть ли более быстрый способ сделать это?

Вот два примера этого очень медленного кода

for index, row in df.iterrows():
    if df.number[index].is_integer():
        df.number[index] = int(df.number[index])

for index, row in df.iterrows():
    if df.string[index] == "XXX":
        df.string[index] = df.other_colum[index].split("\")[0] + df.other_colum[index].split("\")[1]
    else:
        df.string[index] = df.other_colum[index].split("\")[1] + df.other_colum[index].split("\")[0]

Спасибо

1 Ответ

1 голос
/ 10 июля 2019

Как правило, вы хотите избежать итерации строк в кадре данных pandas, поскольку он медленнее, чем другие методы, созданные pandas для выполнения того же действия.Один из способов обойти это - использовать apply .Вы должны переопределить столбец number:

df["number"] = df["number"].apply(lambda x: int(x) if x.is_integer() else x)

и (пере) определить столбец string:

df["string"] = df["other column"].apply(lambda x: x.split("\\")[0] + x.split("\\")[1] if x == r"XX\X" else x.split("\\")[1] + x.split("\\")[0])

Сделав некоторые предположения на основе данных, которые вы удалили изпроблема установлена ​​- .split("\") является неправильным синтаксисом, и «другой столбец» выше обязательно должен иметь обратную косую черту, чтобы ваш код (и мой) работал, в противном случае .split("\\")[1] вернет ошибку.

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