Я определил панды DataFrame, учитывая количество строк (индекс) и столбцов. Я выполняю ряд операций и сохраняю данные в таком DataFrame. Код, выполняющий эту операцию, следующий:
import math
import numpy as np
import pandas as pd
sens_fac = [0.8, 1, 1.2]
A = 13;
B = 5;
C = 7/2;
D = 3*1.2;
par = [A,B,C,D]
data = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
for i in range(len(par)):
factors = [1, 1, 1, 1]
for j in range(len(sens_fac)):
factors[i] = sens_fac[j]
print(factors)
x=25
t1 = np.log(x)**math.sin(x/(A*factors[0]))
t2 = (B*factors[1])*math.sqrt(x)
t3 = (factors[2]*C)**math.exp(1/x)
t4 = x/(factors[3]*D)*2
res = t1 + t2 + t3 + t4
data[i][j] = res
Проблема в том, что я пытаюсь выбрать определенный элемент такого DataFrame. Например, если я печатаю данные, это будет DataFrame 3 строки и 4 столбца. Но когда я пытаюсь выбрать элемент третьей строки и четвертого столбца (data[2][3]), я получаю сообщение об ошибке. С другой стороны, если я выберу элемент как data[3][2], он даст мне искомое число, но я понимаю, что data[3][2] будет четвертой строкой и третьим столбцом, а это несуществующий элемент.
@asimoneau, но я не понимаю, первое число между [] относится к строкам, а второе число между [] относится к столбцам, не так ли?
Это сбивает с толку, потому что вы используете числовые метки. data['a'] будет столбцом 'a' вашего DataFrame. Таким образом, data[2][3] возвращает индекс элемента 3 столбца 2.






Доступ к значениям фрейма данных можно получить с помощью явной индексации (loc), неявной индексации (iloc). Для большей ясности: предположим, что столбец 3 имеет имя «qwe», а индекс строки 2 будет «c». Это называется явной ссылкой на индексы.
data.loc['c', 'qwe']
Неявно вы можете применить это так:
data.iloc[2, 3]
Но, если вы будете использовать ломтик. Тогда при явном индексировании будет еще одно значение, так как при явном индексировании срез происходит включительно.
print(data.loc[:2, 3])
print(data.iloc[:2, 3])
"""
0 49.0406
1 45.5684
2 43.2536
Name: 3, dtype: object
0 49.0406
1 45.5684
Name: 3, dtype: object
"""
Поскольку у вас есть индексы (строки) в строгой нумерации, использование явного и неявного индекса приведет к одному и тому же результату.
print(data.loc[2, 3])#43.2535547215997
print(data.iloc[2, 3])#43.2535547215997
iloc, loc и at, iat разница описана здесь
Для одиночных значений предполагается, что быстрее at, iat.
data.at[2,3]- это то, что вам нужно, так как прямой доступ к столбцам сначала в DataFrames.