Преобразовать строку в заголовок столбца для Pandas DataFrame,
111
Данные, с которыми мне приходится работать, немного запутаны. Внутри данных есть имена заголовков. Как я могу выбрать строку из существующего фрейма данных pandas и сделать ее (переименовать в) заголовком столбца?
In[21]: df = pd.DataFrame([(1,2,3),('foo','bar','baz'),(4,5,6)])In[22]: dfOut[22]:01201231 foo bar baz2456
Установите метки столбцов, чтобы они были равны значениям во 2-й строке (позиция индекса 1):
In[23]: df.columns = df.iloc[1]
Если индекс имеет уникальные метки, вы можете удалить вторую строку, используя:
In[24]: df.drop(df.index[1])Out[24]:1 foo bar baz01232456
Если индекс не уникален, вы можете использовать:
In[133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]Out[133]:1 foo bar baz01232456
Использование df.drop(df.index[1])удаляет все строки с той же меткой, что и вторая строка. Поскольку неуникальные индексы могут привести к подобным препятствиям (или потенциальным ошибкам), часто лучше позаботиться о том, чтобы индекс был уникальным (даже если Pandas этого не требует).
Большое спасибо за быстрый ответ! Как я могу выбрать строку по значению вместо положения индекса, чтобы сделать ее заголовком? Итак, для вашего примера что-то вроде .. df.columns = df [df [0] == 'foo']
EK
Проблема в том, что значение может иметь более одной строки "foo". Один из способов обойти эту проблему, чтобы явно выбрать первый такой ряд: df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]].
unutbu 01
Я понимаю, почему вы так поступили. В моем случае я знаю, что есть только одна строка со значением «foo». Так что это нормально. Я только что сделал это, думаю, он такой же, как тот, который вы дали мне выше. idx_loc = df [df [0] == 'foo']. index.tolist () [0] df.columns = df.iloc [idx_loc]
"foo"
. Один из способов обойти эту проблему, чтобы явно выбрать первый такой ряд:df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]]
.Это работает (pandas v'0.19.2 '):
источник
.drop(df.index[0])
Было бы проще воссоздать фрейм данных. Это также интерпретирует типы столбцов с нуля.
источник
Вы можете указать индекс строки в конструкторах read_csv или read_html через
header
параметр, который представляетRow number(s) to use as the column names, and the start of the data
. Это имеет то преимущество, что автоматически удаляются все предыдущие строки, которые предположительно являются ненужными.источник