преобразование типов данных в фрейме данных

#python #pandas #dataframe #type-conversion

#python #панды #фрейм данных #преобразование типов

Вопрос:

У меня есть csv file столбец с именем population. В этом CSV file значения этого столбца отображаются как десятичные (с плавающей запятой), т.Е., например, для 12345.00. Я преобразовал весь этот файл в ttl RDF format , и заполняющий литерал отображается как тот же, т.е. 12345.0 в файле ttl. Я хочу, чтобы он отображался как целое число (целое число), т.Е. 12345 — Нужно ли мне преобразовывать тип данных этого столбца или что делать? Кроме того, я хотел бы спросить, как я могу проверить тип данных столбца фрейма данных в python? (Новичок в python) — Спасибо

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

1. Когда вы читаете столбец, вы можете указать dtype нужный вам словарь в pd.read_csv методе : dtype={'your_col_name': 'int64'} . Однако, если ваши данные являются беспорядочными, это приведет к сбою (возможно, отсутствуют данные), поэтому вам может потребоваться выполнить другие действия, чтобы вызвать неверные значения, а затем попробовать другой тип

Ответ №1:

Сначала вы можете попробовать изменить тип данных столбца. Например

 df = pd.DataFrame([1.0,2.0,3.0,4.0], columns=['A'])

    A
0  1.0
1  2.0
2  3.0
3  4.0
Name: A, dtype: float64
 

теперь

 df['A'] = df['A'].astype(int)

    A
0  1.0
1  2.0
2  3.0
3  4.0
Name: A, dtype: int32
 

Если у вас есть некоторый np.NaN в столбце, который вы можете попробовать

 df = df.astype('Int64')
 

Это поможет вам

      A
 0  1.0
 1  2.0
 2  3.0
 3  4.0
 4  <NA>
 

Где < NA> — эквивалент Int64 для np.NaN. Важно знать, что np:NaN — это число с плавающей запятой, а < NA> еще не получил широкого распространения и не оптимизирован для памяти и производительности, подробнее об этом вы можете прочитать здесь
https://pandas.pydata.org/docs/user_guide/missing_data.html#integer-dtypes-and-missing-data

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

1. @Allolz и @Evert Acosta — я попробовал csv_data = pd.read_csv("~/Documents/the_file.csv") ‘csv_data [‘theColName’] = csv_data [‘theColName’].astype (int)`, но он выдал ошибку as ValueError: Cannot convert non-finite values (NA or inf) to integer , которая, я думаю, связана с тем, что есть некоторые пропущенные значения — Кроме того, я не хочу их удалятьотсутствующие значения, поскольку они важны для меня.

Ответ №2:

csv_data['theColName'] = csv_data['theColName'].fillna(0)
csv_data['theColName'] = csv_data['theColName'].astype('int64') сработало, и столбец успешно преобразован в int64. Спасибо всем