Я хочу иметь возможность запускать некоторую статистику в фрейме данных. Используя базу данных pandas, как я могу преобразовать типы данных объектов в типы данных int?

#python #pandas

#python #pandas

Вопрос:

Хотя все значения в столбцах, которые я использую, являются числами, Python сообщает мне, что тип данных для каждого из них — «объект». Я не могу запускать для них функции статистики, если они не являются числами. Я пробовал

 df['ColumnName'].astype(str).astype(int)
  

но я получаю следующую ошибку:

 ValueError: invalid literal for int() with base 10: ''
  

Это то, что я получаю, когда запускаю df.dtypes:

 0
StartDate                object
EndDate                  object
Status                   object
IPAddress                object
Progress                 object
Duration (in seconds)    object
Finished                 object
RecordedDate             object
ResponseId               object
RecipientLastName        object
RecipientFirstName       object
RecipientEmail           object
ExternalReference        object
LocationLatitude         object
LocationLongitude        object
DistributionChannel      object
UserLanguage             object
TIMES TAUGHT             object
LANGUAGE                 object
NONMEMBER                object
ENGAGED                  object
BAPTIZED                 object
CONCERNS_1               object
PURPOSE_1                object
EXPERIENCE               object
Title                    object
Mname                    object
Actor                    object
Q7 - Topics              object
dtype: object
  

Как я могу изменить эти типы данных?

Комментарии:

1. вы могли бы написать это так: df[‘column_name].astype(int)

Ответ №1:

В вашем столбце есть пустые строки, которые нельзя преобразовать в int значения

 pd.to_numeric(df['ColumnName'])
  

будет работать, если значения являются допустимыми числами или пустыми строками. Ваш столбец будет type float , потому что пустые строки будут преобразованы в nan значения.


 pd.to_numeric(df['ColumnName'], errors='coerce')
  

заменит каждое значение, которое не может быть преобразовано в число nan .

Комментарии:

1. Я думаю, я понял это. pd.to_numeric(df['colb']).astype("Int32") кажется, работает; итак, комбинация ответов

2. возможно, даже смогу сделать df['ColumnName'].astype("Float32").astype("Int32")