Этот вопрос странный, так как я знаю, КАК что-то делать, но я не знаю, ПОЧЕМУ я не могу сделать это по-другому.Get Pandas DataFrame первая колонка
Пусть простой кадр данных:
import pandasas pd
a = pd.DataFrame([[0,1], [2,3]])
можно нарезать этот фрейм данных очень легко, первый столбец a[[0]]
, вторая a[[1]]
. Простой, не так ли?
Теперь у вас есть более сложный фрейм данных. Это часть моего кода:
var_vec = [i for i in range(100)]
num_of_sites = 100
row_names = ["_".join(["loc", str(i)]) for i in
range(1,num_of_sites + 1)]
frame = pd.DataFrame(var_vec, columns = ["Variable"], index = row_names)
spec_ab = [i**3 for i in range(100)]
frame[1] = spec_ab
кадр данных frame
также панды DataFrame, такие как. Я могу добавить вторую колонку очень легко, как frame[[1]]
. Но когда я пытаюсь frame[[0]]
я получаю сообщение об ошибке:
Traceback (most recent call last):
File "<ipython-input-55-0c56ffb47d0d>", line 1, in <module>
frame[[0]]
File "C:\Users\Robert\Desktop\Záloha\WinPython-64bit-3.5.2.2\python- 3.5.2.amd64\lib\site-packages\pandas\core\frame.py", line 1991, in __getitem__
return self._getitem_array(key)
File "C:\Users\Robert\Desktop\Záloha\WinPython-64bit-3.5.2.2\python- 3.5.2.amd64\lib\site-packages\pandas\core\frame.py", line 2035, in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=1)
File "C:\Users\Robert\Desktop\Záloha\WinPython-64bit-3.5.2.2\python- 3.5.2.amd64\lib\site-packages\pandas\core\indexing.py", line 1184, in _convert_to_indexer
indexer = labels._convert_list_indexer(objarr, kind=self.name)
File "C:\Users\Robert\Desktop\Záloha\WinPython-64bit-3.5.2.2\python- 3.5.2.amd64\lib\site-packages\pandas\indexes\base.py", line 1112, in _convert_list_indexer
return maybe_convert_indices(indexer, len(self))
File "C:\Users\Robert\Desktop\Záloha\WinPython-64bit-3.5.2.2\python- 3.5.2.amd64\lib\site-packages\pandas\core\indexing.py", line 1856, in maybe_convert_indices
raise IndexError("indices are out-of-bounds")
IndexError: indices are out-of-bounds
Я все еще могу использовать frame.iloc[:,0]
, но проблема в том что я не понимаю, почему я не могу использовать простую нарезку по [[]]
? Я использую winpython spyder 3, если это помогает.
Он работает в первом DataFrame, потому что один имеет столбец с именем '0'. Это первый столбец, но это не обязательно. Возможно, это был любой другой столбец с этим именем. Поэтому, чтобы использовать то же самое, вам нужно получить доступ по имени ('frame [['Variable']]' при условии, что вы хотите вернуть DataFrame, а не Series). – ayhan