Удаление столбцов с определенными строками в определенной строке с использованием Python - PullRequest
2 голосов
/ 02 октября 2019

Так что сейчас у меня есть огромный набор данных переписи, который я пытаюсь очистить с помощью Pandas. В моем нынешнем виде у меня есть несколько столбцов, измеряющих «статистическую значимость», которые содержат либо нулевое значение, либо и «*». Фраза «Статистическая значимость» находится не в имени столбца, а в первой строке столбца как строка описания. Их более 2000, и я просто хочу отбросить их все, используя Python (я буду выполнять большую часть фактического анализа данных в R). После некоторой настройки я получил это, чтобы успешно вывести новый CSV-файл:

import pandas as pd
df = pd.read_csv('~/Desktop/ht1.csv')
def drop(data):
    df2 = []
    for x in data:
        if  "Significance" in data.loc[0,x]:
            data.drop(x, axis = 1, inplace=True)
            return data
ndf = drop(df)
ndf.to_csv('~/Desktop/ht2.csv')

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

Любая помощь будет ОЧЕНЬ признательна.

1 Ответ

0 голосов
/ 02 октября 2019

В вашем коде есть два недостатка:

  1. Ваш return выполняется в блоке if, поэтому вы возвращаете эти данные после удаления первого столбца, а остальные столбцы с «Значимостью». 'остаются в кадре данных.
  2. Удаление столбцов на месте во время итерации по данным приводит к путанице.

Это работает:

def drop(data):
    cols = []
    for x in data:
        if  "Significance" in data.loc[0,x]:
            cols.append(x)
    data.drop(cols, axis = 1, inplace=True)
    return data


короче и элегантнее способ достичь желаемого - 1017 *

newdf = df.loc[:,~df.iloc[0].str.contains('Significance')]
...