Невозможно изменить фрейм данных Pandas, прочитанный из файла Excel.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно изменить фрейм данных Pandas, прочитанный из файла Excel.

Сообщение Anonymous »

У меня есть функция, которую можно применить к DataFrame следующим образом:
import pandas as pd
from math import comb
from itertools import combinations

def find_match_total(row, total_col, sum_cols):
size = len(row)
data = row.loc[row.index.isin(sum_cols)].to_dict()
total= row[total_col]
keys = data.keys()
values = data.values()
break_outer_loop = False
for i in range(2,size+1):
if break_outer_loop:
break
key_combinations = combinations(keys,i)
value_combinations = combinations(values,i)
for cols, values in zip(key_combinations, value_combinations):
if sum(values)==total:
break_outer_loop= True
print(cols, values)
for key in row.index:
if key not in cols and key in sum_cols:
print(key, row[key])
row[key]= 0.0 if row[key].dtype =='float64' else 0
break

Это два тестовых данных:
data1={'a':[1,2,3,4,5,6],'b':[11,12,13,14,15,16],'x':[11,12,13,14,15,16],'c':[12,12,16,14,15,16],'f':[12,12,13,14,15,16]}

data2= {'c': {0: 786.6238018663737,
1: 786.6238018663737,
2: 786.6238018663737,
3: 786.6238018663737,
4: 786.6238018663737,
5: 786.6238018663737,
6: 786.6238018663737,
7: 786.6238018663737},
'a': {0: 589.9678513997803,
1: 589.9678513997803,
2: 589.9678513997803,
3: 589.9678513997803,
4: 589.9678513997803,
5: 589.9678513997803,
6: 589.9678513997803,
7: 589.9678513997803},
'b': {0: 196.65595046659342,
1: 196.65595046659342,
2: 196.65595046659342,
3: 196.65595046659342,
4: 196.65595046659342,
5: 196.65595046659342,
6: 196.65595046659342,
7: 196.65595046659342},
'x': {0: 0.016,
1: 0.016,
2: 0.016,
3: 0.016,
4: 0.016,
5: 0.016,
6: 0.016,
7: 0.016},
'f': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0}}

Ссылка на файл Excel: файл Excel Ссылка на лист Google
Я создаю фреймы данных из данных1, данных2 и из файла Excel:
df_test1= pd.DataFrame(data1)
df_test2= pd.DataFrame(data2['data'], columns=data2['columns'])
df_test3= pd.read_excel('D:/Book2.xlsx', sheet_name='Sheet1')

Я проверяю df_test2 и df_test3
print(df_test2==df_test3)

Результат имеет аналогичную структуру и значения:
c a b x f
0 True True True True True
1 True True True True True
2 True True True True True
3 True True True True True
4 True True True True True
5 True True True True True
6 True True True True True
7 True True True True True

Я применяю функцию к каждому DataFrame:
df_test1.apply(find_match_total, args=('c',['a','b','x']), axis=1)
df_test2.apply(find_match_total, args=('c',['a','b','x']), axis=1)
df_test3.apply(find_match_total, args=('c',['a','b','x']), axis=1)

Я получил странные результаты. Я вижу, что df_test1 и df_test2 изменяются по желанию (с 0), но df_test3 по-прежнему не меняется, хотя df_test2 и df_test3 имеют те же типы данных и структуру, что и протестированные выше???
df_test1 is modified (0,x) ; (2,x)
a b x c f
0 1 11 0 12 12
1 2 12 12 12 12
2 3 13 0 16 13
3 4 14 14 14 14
4 5 15 15 15 15
5 6 16 16 16 16

df_test2 is modified => column x is set to 0

c a b x f
0 786.623802 589.967851 196.65595 0.0 0.0
1 786.623802 589.967851 196.65595 0.0 0.0
2 786.623802 589.967851 196.65595 0.0 0.0
3 786.623802 589.967851 196.65595 0.0 0.0
4 786.623802 589.967851 196.65595 0.0 0.0
5 786.623802 589.967851 196.65595 0.0 0.0
6 786.623802 589.967851 196.65595 0.0 0.0
7 786.623802 589.967851 196.65595 0.0 0.0

df_test3 read from excel is not modified
c a b x f
0 786.623802 589.967851 196.65595 0.016 0
1 786.623802 589.967851 196.65595 0.016 0
2 786.623802 589.967851 196.65595 0.016 0
3 786.623802 589.967851 196.65595 0.016 0
4 786.623802 589.967851 196.65595 0.016 0
5 786.623802 589.967851 196.65595 0.016 0
6 786.623802 589.967851 196.65595 0.016 0
7 786.623802 589.967851 196.65595 0.016 0


Подробнее здесь: https://stackoverflow.com/questions/791 ... excel-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как преобразовать фрейм данных PySpark Pandas в фрейм данных PySpark?
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с форматированием сложного файла Excel в фрейм данных pandas для анализа данных.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с форматированием сложного файла Excel в фрейм данных pandas для анализа данных.
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с форматированием сложного файла Excel в фрейм данных pandas для анализа данных.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Pandas загружает старую версию файла Excel в фрейм данных
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»