Проверьте, есть ли в столбце строковый объект, затем преобразуйте в числовой - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно проверить, имеет ли столбец в моем фрейме данных тип «объект», а затем, основываясь на этой информации, изменить все значения в этом столбце на целое число.Вот функция, которую я написал для этого:

def multiply_by_scalar(self):
    self.columns_to_index()

    i = ask_user("What column would you like to multiply by a scalar? Please type in index:\n", int)
    m = ask_user("Type in the value of the scalar:\n", int)

    if self.df.columns[i] == np.object:
        print("{} is of type 'object'. Scalar multiplication can only be applied to dtypes of type 'numeric'.".format(self.df.columns[i]))
        c = ask_user("Would you like to convert column '{}' to type 'int'?".format(self.df.columns[i]))
        if c in yes_values:
            pd.to_numeric(self.df.columns[i])
            self.df.columns[i] = self.df.columns[i].multiply(m)
            print(self.df.columns[i])
    else:
        self.df.columns[i] = self.df.columns[i].multiply(m)
        print(self.df.columns[i])

ПРИМЕЧАНИЕ. self.columns_to_index() - это функция в программе, которая отображает каждое имя столбца в индекс, и это не важная информация для ответа на вопрос.

Когда я запускаю эту функцию, я получаю сообщение об ошибке:

AttributeError: 'str' object has no attribute 'multiply

Демонстрация того, что преобразование из строки в целое число не работает.

1 Ответ

0 голосов
/ 04 марта 2019

Вот мое решение:

#df.dtypes.to_dict() create a dictionary with name column as index and dtype as values

for colname, coltype in df.dtypes.to_dict().items():
    if coltype ==  'object' : df[colname] = df[colname].astype(int)

или если у вас есть функция fc для выполнения

def fc(colname, coltype):
    #coding fc here

for colname, coltype in df.dtypes.to_dict().items():
    if coltype ==  'object' : fc(colname, coltype)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...