Функция Python для изменения типа данных столбца не работает - PullRequest
0 голосов
/ 08 июля 2019

Я написал функцию python, которая берет столбец в кадре данных, проверяет тип данных и, если это ложно, изменить требуемый тип данных. Однако изменения происходят только внутри функции. Как это исправить, чтобы сделать постоянные изменения в кадре данных?

def change_required_data_type (column,data_type):
    is_correct = None

    for i in column:
        if type(i) != data_type:
            is_correct = False


    if is_correct != False:
        print('True')

    elif is_correct == False:
        column = column.astype(data_type)        
        print('False')

1 Ответ

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

Для вашего вопроса о том, что что-то работает только внутри функции, а не снаружи, вам нужно добавить возвращение некоторого объекта в конец вашей функции.

def myfunc(column, data_type):
    # ...
    elif is_correct == False:
    column = column.astype(data_type)        
    print('False')

    # You've modified the column variable inside the function,
    # so your function needs to return it to outside the function.        
    return column

# Call your function from outside.
result = myfunc(column, data_type)  
# Use inputs for column and data_type when calling your function.
print(result)

Однако, если выЕсли вы используете библиотеку Pandas, вы должны использовать обычный способ изменения типа данных столбца.См. https://cmdlinetips.com/2018/09/how-to-change-data-type-for-one-or-more-columns-in-pandas-dataframe/

Как правило, вы хотите использовать df.astype(str), чтобы изменить тип данных одного или нескольких столбцов в кадре данных Pandas.Отдельный столбец информационного кадра также называется серией.

df['Column1'] = df['Column1'].astype('str')
df.Day = df.Day.astype('int64')

Вот еще несколько примеров изменения типа данных в объекте Pandas DataFrame.

import pandas as pd

mydic = {
    "name": ['Alice', 'Tommy', 'Jane'],
    "age": [9, 21, 22],
    "height": [3.6, 6.1, 5.5],
}

df = pd.DataFrame(data = mydic)
print(df)
print(df.dtypes)

# First change age from integer to floating point.
df.age = df.age.astype('float64')

print(df.age)  # Notice the decimal format 9.0.
print(df.dtypes)  # age is now floating point.

# Next change height from floating point to integer.
df.height = df.height.astype('int32')
print(df.height)  # Notice height is truncated, no more decimal point.

# Next change age to string (object type).
df.age = df.age.astype('str')
print(df.dtypes)
print(df)

# Change height from integer to float, using Bracket Notation.
df['height'] = df['height'].astype('float32')
print(df.dtypes)
# Notice height is a decimal format, 3.0.
# But the original fractional data of .6 was lost (was 3.6).

Использование по умолчанию df.astype('str')вернуть КОПИЮ, а не заменить исходный кадр данных.Поскольку вы присвоили изменение исходной серии с помощью df.name = ..., вы изменили тип «на месте».

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