#python #pandas #dataframe #types #type-conversion
#python #pandas #фрейм данных #типы #преобразование типов
Вопрос:
У меня есть фрейм данных pandas со столбцами Dtype object
. Значения этих столбцов, очевидно, являются числами. Однако convert_dtypes
не удается распознать типы чисел и object
снова возвращается для всех столбцов. Вот некоторые результаты, которые могут проиллюстрировать проблему:
my_df.convert_dtypes().info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 3 non-null object
1 B 3 non-null object
2 C 3 non-null object
3 D 3 non-null object
4 E 3 non-null object
5 F 3 non-null object
dtypes: object(6)
memory usage: 168.0 bytes
И это ячейки фрейма данных:
my_df
A B C D E F
0 0 1 3 0 1 1
1 0 2 2 2 0 1
2 0 1 0 2 0 1
Хотя я могу конвертировать столбцы, используя другие методы (например to_numeric
,), я хочу иметь общий способ сделать это, поскольку входящие данные не всегда будут числовыми, и в этом случае string
все будет в порядке.
Фрейм данных поступает из другой службы, поэтому дайте мне знать, если вам понадобится дополнительная информация об этом. Это причина to_numeric
, по которой это не сработает. В принципе, мне нужно преобразовать типы в число, когда это возможно, и в строку в противном случае.
Версия Python 3.8.5
и версия pandas 1.1.2
.
Ответ №1:
Если логика преобразуется в числовую, если это возможно, используйте errors='ignore'
параметр in to_numeric
для возврата исходных значений столбца, если диалог не удался (это означает хотя бы одно нечисловое значение в столбце):
print (df)
A B C D E F
0 0 1 3 0 1 a
1 0 2 d s 0 s
2 0 1 0 s 0 d
df = df.apply(pd.to_numeric, errors='ignore')
print (df.dtypes)
A int64
B int64
C object
D object
E int64
F object
dtype: object
Комментарии:
1. На самом деле это должно сработать. Знаете ли вы, почему
convert_dtypes
это работает не так, как ожидалось?2. @IvayloToskov — Понятия не имею, может быть, ошибка?