Ошибка при замене '?'со средним значением в фрейме данных в Python - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть набор данных автомобиля, где я хочу заменить '?'значения в столбце нормализованные значения к среднему значению оставшихся числовых значений.Код, который я использовал:

mean = df["normalized-losses"].mean()
df["normalized-losses"].replace("?",mean)

Однако это вызывает ошибку:

ValueError: не удалось преобразовать строку в число с плавающей точкой: '??? 164164? 158? 158? 192192188188 ?? 121988111811811814814814814811014513713710110110111078106106858585107 ???? 145 ?? 104104104113113150150150150129115129115? 115118? 93939393? 142 ??? 161161161161153153 ??? ?? 125125125137128128128122103128128122103168106106128108108194194231161161 161161 ?? +16116116111911915415415474? 186 ?????? 1501041501041501048383831021021021021028989858587877477819191919191919191168168168168134134134134134134656565656519719790? 1221229494949494? 256 ??? 1037410374103749595959595'

Может ли кто-нибудь помочь с тем, как я могу преобразовать'? 'значения к средним значениям.Кроме того, я впервые работаю с пакетом Pandas, поэтому, если я допустил какие-то глупые ошибки, пожалуйста, прости меня.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Используйте to_numeric для преобразования нечисловых значений в NaN с, а затем fillna с mean:

vals = pd.to_numeric(df["normalized-losses"], errors='coerce')
df["normalized-losses"] = vals.fillna(vals.mean()) 
#data from jpp
print (df)
   normalized-losses
0                1.0
1                2.0
2                3.0
3                3.4
4                5.0
5                6.0
6                3.4

Подробности :

print (vals)
0    1.0
1    2.0
2    3.0
3    NaN
4    5.0
5    6.0
6    NaN
Name: normalized-losses, dtype: float64

print (vals.mean())
3.4
0 голосов
/ 29 ноября 2018

Среднее для ряда смешанных типов не определено.Преобразуйте в числовые и , затем используйте replace:

df = pd.DataFrame({'A': [1, 2, 3, '?', 5, 6, '??']})

mean = pd.to_numeric(df['A'], errors='coerce').mean()
df['B'] = df['A'].replace('?', mean)

print(df)

    A    B
0   1    1
1   2    2
2   3    3
3   ?  3.4
4   5    5
5   6    6
6  ??   ??

Если вам нужно заменить все нечисловые значения, тогда используйте fillna:

nums = pd.to_numeric(df['A'], errors='coerce')
df['B'] = nums.fillna(nums.mean())

print(df)

    A    B
0   1  1.0
1   2  2.0
2   3  3.0
3   ?  3.4
4   5  5.0
5   6  6.0
6  ??  3.4
0 голосов
/ 29 ноября 2018

Используйте replace(), затем fillna():

df['normalized-losses'] = df['normalized-losses'].replace('?',np.NaN)
df['normalized-losses'].fillna(df['normalized-losses'].mean())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...