Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Pandas изменение данных

#python #pandas #dataframe


Подскажите, в чём дело.
Создаю DataFrame, хочу изменить значение, но ничего не выходит. В чём тут хитрость?

data = {'n':[1,1,1,1,1,1], 'bucket':['0','1-30','31-60','91-120','121-150','151-180'], 
'balance':[1899.1644,1899.158,1741.408,1641.7814,1454.0343,1454.0343],
'date':['2016-01-16','2016-02-16','2016-03-16','2016-05-16','2016-06-16','2016-07-16']}

df = pd.DataFrame(data)

df.loc[5]['n']=100


Результат:



В маленьком примерчике такая же ерунда.

data = {'a':[1,2,3], 'b':['d','b','c']}
df = pd.DataFrame(data)
print(df)
df.loc[0]['a'] = 100
print(df)




НО!!! Если числа, то всё ок:

data = {'a':[1,2,3], 'b':[5,6,7]}
df = pd.DataFrame(data)
print(df)
df.loc[0]['a'] = 100
print(df)



    


Ответы

Ответ 1



Pandas должен был выдать вам предупреждение (Warning), описывающее проблему: In [7]: df.loc[5]['n']=100 C:\Users\Max\Anaconda4\Scripts\ipython3-script.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy if __name__ == '__main__': In [8]: df Out[8]: balance bucket date n 0 1899.1644 0 2016-01-16 1 1 1899.1580 1-30 2016-02-16 1 2 1741.4080 31-60 2016-03-16 1 3 1641.7814 91-120 2016-05-16 1 4 1454.0343 121-150 2016-06-16 1 5 1454.0343 151-180 2016-07-16 1 Как это сделать правильно: In [9]: df.loc[5, 'n'] = 100 In [10]: df Out[10]: balance bucket date n 0 1899.1644 0 2016-01-16 1 1 1899.1580 1-30 2016-02-16 1 2 1741.4080 31-60 2016-03-16 1 3 1641.7814 91-120 2016-05-16 1 4 1454.0343 121-150 2016-06-16 1 5 1454.0343 151-180 2016-07-16 100

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

Отправить комментарий