#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)`, но он выдал ошибку asValueError: 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. Спасибо всем