#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
Комментариев нет:
Отправить комментарий