Обработка процента свыше 100 % как двузначного %

У меня есть CSV, содержащий некоторые необработанные данные. Я удаляю строки условно, но сталкиваюсь с проблемой, когда процент > 100%. Процент, по-видимому, рассматривается как двузначный %.

Вот моя функция для преобразования этого фрейма данных. Цель состоит в том, чтобы удалить все строки с процентом >= 50% и процентом <0% и процентом == 0% в указанном столбце; затем отсортируйте по убыванию по этому столбцу. Я уверен, что могу комбинировать все преобразования перетаскивания, но мне нравится читабельность этого.

def modify_csv():
    df = pd.read_csv("Initial.csv")

    # Delete row if utb > 50%
    df.drop(df[df["column 1"] >= "50%"].index, inplace = True)

    # Delete row if utb == 0%
    df.drop(df[df["column 1"] == "0%"].index, inplace = True)

    # Delete row if utb == 0%
    df.drop(df[df["column 1"] < "0%"].index, inplace = True)

    # Sort by column 1
    df.sort_values(by = "column 1", ascending = False, inplace = True)

    df.to_csv("Final.csv", na_rep = 0, index = False)

Это вывод для моего последнего запуска «столбца 1»:

49%
48%
47%
45%
39%
36%
27%
19%
17%
111%
104%

Все работает отлично, за исключением того, что вы можете видеть, что 111% и 104% обрабатываются так, как будто они равны 11% и 10%, так как мы сортируем по убыванию. Любое понимание будет оценено! Я поискал в Интернете, но не смог найти подобных случаев. Цените помощь!

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Причина такого порядка сортировки не в том, что он обрабатывается как двузначный процент, а в том, что данные обрабатываются как строка. Строка сравнивается лексикографически.

Вам нужно будет установить dtype аргумент при вызове read_csv, чтобы убедиться, что ваши данные обрабатываются как числа. Вам также может понадобиться использовать converters, чтобы убрать знак процента.

Большое спасибо Ли. Следующий раздел моей функции преобразовал этот столбец в числовой, чтобы я мог получить среднее значение этого столбца. Я переместил to_numeric перед моим кодом выше, и теперь все работает. Спасибо за помощь.

AHayser 12.06.2019 02:26
Ответ принят как подходящий

Перед числовым сравнением преобразуйте числовые строки в числа:

def modify_csv():
    df = pd.read_csv("Initial.csv")
    df['percent'] = pd.to_numeric(df["column 1"].str.rstrip('%'))
    df = df.loc[(df['percent'] < 50) & (df['percent'] > 0)]
    df = df.sort_values(by = "percent", ascending=False)
    # Instead, you may want to keep the percent column and drop column 1, because numbers are more useful than numeric strings,
    # and whoever reads Final.csv may end up needing to strip the % signs again...
    df = df.drop('percent', axis=1)
    df.to_csv("Final.csv", na_rep=0, index=False)

Спасибо! Подобно первому комментарию с отличным примером. Ценить это.

AHayser 12.06.2019 02:27

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