#python-3.x #pandas
#python-3.x #панды
Вопрос:
У меня есть фрейм данных, который я создал из словаря примерно так: pd.DataFrame.from_dict(dict1, dtype=str)
однако типы данных для всех полей отображаются как «Объект».
Я хочу преобразовать некоторые столбцы в int и/или float, но я не могу этого сделать, даже попробовав несколько способов.
Я пробовал следующие способы :
df['duration'].astype(int) df['duration'].astype(str).astype(int) df['duration'].replace('"','').astype(int) ValueError: invalid literal for int() with base 10: '"467900"' df['cpu'].astype(float) df['cpu'].astype(str).astype(float) df['cpu'].replace('"','').astype(float) ValueError: could not convert string to float: '"152.7"'
Это мой фрейм данных :
duration realtime cpu 0 "268641" "46871" "152.7" 1 "208642" "2709" "107.1" 2 "208817" "2163" "108.2" 3 "238558" "9307" "141.1" 4 "208881" "2729" "106.7"
Пожалуйста, дайте мне знать, как я могу заставить это работать.
Заранее спасибо! Пожалуйста, дайте мне знать, как я могу заставить это работать.
Заранее спасибо!
Ответ №1:
df=df.replace(regex='[^d.]', value='')#Remove any non digits except the decimal point #Then now convert as you want df['realtime']=df['realtime'].astype(int) df['cpu']=df['cpu'].astype(float)
Ответ №2:
В дополнение к ответу @wwnde вы также можете выполнить эту операцию в одной строке следующим образом:
df.replace(regex='[^d.]', value='').astype({ 'duration' : int, 'realtime' : int, 'cpu' : float })
Выход:
duration realtime cpu 0 268641 46871 152.7 1 208642 2709 107.1 2 208817 2163 108.2 3 238558 9307 141.1 4 208881 2729 106.7
Ответ №3:
проблема, которую я вижу здесь, заключается в том, что у вас есть » в строке. Правильное представление вашей строки — «268641». Грязное решение было бы:
df[duration] = list(map(lambda x: x.replace('"',''),df[duration])) df[realtime] = list(map(lambda x: x.replace('"',''),df[realtime])) df[cpu] = list(map(lambda x: x.replace('"',''),df[cpu]))
тогда вы можете попробовать
df[cpu].astype(int)
Комментарии:
1. Это можно сделать простым способом, как упоминалось @wwnde
Ответ №4:
Еще один способ заставить ваш код работать (потому что вы были почти правы).
Если вы хотите использовать строковую функцию в столбце, вам нужно добавить .str перед ней.
Подобный этому
df['duration'].str.replace('"','').astype(float)