Как переименовать имя столбца на основе условия в Python? - PullRequest
0 голосов
/ 19 сентября 2019

введите описание изображения здесь У меня есть кадр данных, который содержит 4 столбца, и я должен переименовать столбцы на основе его элементов.пример: если большинство элементов столбцов являются строковыми, переименуйте их в Name, если большинство являются числами с плавающей запятой, переименуйте их в значения, пожалуйста, найдите прикрепленное изображение для справки.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Как насчет этого?

мы можем использовать select_dtypes и передавать их в список для подсчета длины.

col_floats = df.select.dtypes(include='float').columns.tolist()
col_strings = df.select.dtypes(include='object').columns.tolist()

if len(col_floats) > len(col_strings):
    df.columns.map(lambda x : 'Values '  + x)
else:
    df.columns.map(lambda x : 'AOR ' + x)

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

Редактировать

Глядя на свой DF, я вижу, что вы хотите проверить числа в каждом ряду данных, чтобы увидеть, какие из них больше, поскольку у нас нет текстовой выборки вашего кадра данных.трудно сказать, но что-то вроде этого может сработать:

new_name = []

for columns in df.columns:
    n = pd.to_numeric(df[f'{columns}'],errors='coerce')
    if n.isna().sum() > n.dropna().count(): # tests if strings are greater than numbers
        new_name.append('AOR') 
    else:
        new_name.append('Value')

new_col_dict = dict(zip(df.columns.tolist(),new_name))

Вы можете просто назначить new_names для вашего столбца и проверить вывод с помощью словаря new_col_dict.

, тестируя самостоятельноС кадром данных, в который я добавил несколько случайных целых чисел в столбцы объекта, я получил следующее:

    {'Business Date': 'Value', 
 'First Name': 'AOR',
 'Hours': 'Value',
 'Last Name': 'AOR',
 'Number': 'Value',
 'Pay Code': 'Value',  # I added more ints than strings to this column and the test above worked.
 'Pay Time End': 'Value',
 'Pay Time Start': 'Value',
 'Site Name': 'AOR'}
0 голосов
/ 19 сентября 2019

IIUC, это будет работать для вас

Здесь происходит то, что df[col].count() будет подсчитывать число числовых значений в столбце.Предполагая, что длина столбцов равна 10, если число больше 6, предполагается, что столбцы имеют большинство чисел и изменено на имя nums.Однако называть несколько столбцов одинаково не очень хорошая идея.

cols = df.columns
for col in cols:
    if (df[col].count()/df.shape[0]) > 0.5:
        df.rename({col:'nums'}, axis=1, inplace =True)
    else:
        pass
...