Изменение типа столбца в pandas
Я создал DataFrame из списка списков:
table = [
['a', '1.2', '4.2'],
['b', '70', '0.03'],
['x', '5', '0']
]
df = pd.DataFrame(table)
Как мне конвертировать столбцы в определенные типы? В данном случае я хочу преобразовать 2-й и 3-й столбцы в тип float
.
Существует ли способ указать типы во время преобразования списка в DataFrame? Или лучше создать DataFrame сначала, а затем пройтись по столбцам, чтобы поменять тип для каждого из них? В идеале я хотел бы сделать это динамически, так как может быть сотни столбцов, и не хочу точно указывать, какие столбцы какого типа. Всё, что я могу гарантировать, это то, что в каждом столбце находятся значения одного типа.
5 ответ(ов)
Чтобы преобразовать значения в столбцах DataFrame Pandas в тип float
, вы можете использовать метод astype()
. В вашем случае вы хотите изменить типы данных для столбцов 'two' и 'three', которые изначально представлены как объект (строка). Вот пример, как это сделать:
import pandas as pd
# Исходные данные
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
# Вывод DataFrame
print(df)
# Проверка типов данных
print(df.dtypes)
# Преобразование столбцов 'two' и 'three' в тип float
df[['two', 'three']] = df[['two', 'three']].astype(float)
# Проверка типов данных после преобразования
print(df.dtypes)
Результат будет следующий:
one two three
0 a 1.2 4.2
1 b 70 0.03
2 x 5 0
one object
two object
three object
one object
two float64
three float64
Таким образом, теперь столбцы 'two' и 'three' имеют тип float64
, что позволяет проводить математические операции над ними.
Данный код изменяет тип данных столбца в DataFrame.
df[['col.name1', 'col.name2', ...]] = df[['col.name1', 'col.name2', ...]].astype('data_type')
Вместо 'data_type' вы можете указать желаемый тип данных, как, например, str, float, int и т.д.
Вы можете изменить тип столбца в DataFrame на строковый с помощью следующей команды:
df = df.astype({"columnname": str})
Пример - для изменения типа столбца на строку
df - ваш DataFrame
Вот функция, которая принимает в качестве аргументов DataFrame и список столбцов, и приводит все данные в этих столбцах к числовому типу.
# df - это DataFrame, а column_list - список столбцов в виде строк (например, ["col1", "col2", "col3"])
# зависимости: pandas
def coerce_df_columns_to_numeric(df, column_list):
df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')
Для вашего примера:
import pandas as pd
def coerce_df_columns_to_numeric(df, column_list):
df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1', 'col2', 'col3'])
coerce_df_columns_to_numeric(df, ['col2', 'col3'])
В этом примере функция coerce_df_columns_to_numeric
принимает DataFrame df
и список столбцов ['col2', 'col3']
, затем применяет pd.to_numeric()
к указанным столбцам. Если преобразование не удастся, значения будут заменены на NaN
благодаря параметру errors='coerce'
.
Для создания двух датафреймов с разными типами данных в колонках и их последующего объединения в один, вы можете использовать следующий код:
import pandas as pd
# Создаем первый датафрейм с одной колонкой типа float
d1 = pd.DataFrame(columns=['float_column'], dtype=float)
# Создаем второй датафрейм с одной колонкой типа str
d2 = pd.DataFrame(columns=['string_column'], dtype=str)
# Объединяем оба датафрейма
d1 = d1.append(d2, ignore_index=True)
# Проверяем типы данных в итоговом датафрейме
print(d1.dtypes)
Результат выполнения:
float_column float64
string_column object
dtype: object
После создания датафрейма, вы можете заполнить первый столбец значениями с плавающей точкой, а второй столбец - строками (или любыми другими типами данных по вашему выбору). Просто помните, что если вы хотите сохранить разные типы данных в одном датафрейме, используйте object
как тип для целого датафрейма, чтобы избежать возможных проблем с типами данных.
Как выбрать строки из DataFrame на основе значений столбцов?
Создание DataFrame в Pandas путём последовательного добавления строк
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Получение списка из заголовков столбцов DataFrame в Pandas