Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 6, 2016 18:19:45

Oleg_S
Зарегистрирован: 2016-02-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

DataFrame не изменятся. Почему??? помогите, плз.


Почему print в конце и начале один и тот же??? Я же уже Каждый элемент явно присвоил!!


import numpy as np
import pandas as pd
from pandas import Series, DataFrame
titanic=pd.read_csv('titanic.csv',index_col='PassengerId')
titanic=titanic.drop(,axis=1)
titanic=titanic.dropna(axis=0)

#Почему print в конце и начале один и тот же??? Я же уже Каждый элемент явно присвоил!!
print titanic.Sex.describe()
for c in titanic.Sex:
if c=='male':
c=1
else:
c=0
print c
print titanic.Sex.describe()


count 714
unique 2
top male
freq 453
Name: Sex, dtype: object
1
0
0

0
1
1
1
count 714
unique 2
top male
freq 453
Name: Sex, dtype: object

Офлайн

#2 Фев. 7, 2016 19:05:15

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

DataFrame не изменятся. Почему??? помогите, плз.

При итерации происходит копирование каждого элемента.

for c in titanic.Sex.index:
if titanic.Sex.loc[c] == 'male':
    titanic.Sex.loc[c] = 1

Отредактировано kampella (Фев. 7, 2016 19:05:34)

Офлайн

#3 Фев. 7, 2016 19:58:19

Oleg_S
Зарегистрирован: 2016-02-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

DataFrame не изменятся. Почему??? помогите, плз.

Спасибо огромное. Так сработало. Нашел в документации, что оказывается при вызове двух и более индексов эта дрянь-) копирует срез.

Офлайн

#4 Фев. 7, 2016 22:15:22

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

DataFrame не изменятся. Почему??? помогите, плз.

Это не имеет значения на самом деле, при присваивании мы переопределяем значение и ссылку на область в памяти, те связь с начальным объектом разрывается:

>>> a = [1, [2], 3]
>>> for c in a:
...     print id(c)
...     c = 0
...     print id(c)
... 
11878744
11878768
140024024727496
11878768
11878696
11878768
>>> a
[1, [2], 3]

Если же мы изменяем его, то:
>>> a = [[1], [2], [3]]
>>> for c in a:
...     print id(c)
...     c[0] = 666
...     print id(c)
... 
140024024653480
140024024653480
140024024724112
140024024724112
140024024776784
140024024776784
>>> a
[[666], [666], [666]]

Отредактировано kampella (Фев. 7, 2016 22:25:45)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version