Редактирование конкретных ячеек в панде dataframe? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь написать функцию, которая позволит пользователю легко выбрать конкретную ячейку в кадре данных pandas и изменить ее значение. Например, в приведенном ниже кадре данных я хотел бы, чтобы пользователь мог выбрать ячейку по дате и действию, скажем «2018-03-02» и «Навоз», и изменить значение на «1».

Пример диаграммы

Я сделал это уже в 2018-03-02 и "Cutting", используя этот код (фрейм данных называется q):

q.iat[1,1]=1

Однако я хотел бы иметь возможность изменить ячейку, используя что-то вроде q.iat["2018-03-02", "Cutting"]=1, но я не уверен, как это сделать, так как он говорит, что .iat распознает только целочисленные положения. Есть ли что-то кроме .iat, которое я мог бы использовать, или мне нужно было бы установить словарь для каждой даты и каждого столбца?

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Вы можете выбрать столбцы по имени в пандах, просто используя их имя:

q['Manure']

Чтобы выбрать строки, вам нужен индекс, чтобы однозначно идентифицировать их, это может быть дата, если вы убедитесь, что она в формате, который однозначно идентифицирует ее. Например:

q = q.set_index(pd.DatetimeIndex(q['Dates']))

Затем вы можете выбрать каждую ячейку, выполнив:

q.loc[<rowIndex>, <colName>]

0 голосов
/ 14 января 2019

Ваш фрейм данных индексируется с именами столбцов и индексом. Вы можете установить свой индекс с set_index : df.set_index('date')
Затем используйте индекс даты и столбец «Обрезка», чтобы изменить значение с помощью .loc : df.loc('2018-03-02','Cutting') = 1

0 голосов
/ 14 января 2019

pd.DataFrame.at

Используйте at вместо iat для эффективной индексации на основе скалярных меток:

q.at['2018-03-02', 'Cutting'] = 1

К Суммировать :

Краткое руководство по индексированию:

  1. Используйте iat / at для скалярного доступа / установки по целочисленной позиции или метке соответственно.
  2. Используйте iloc / loc для нескалярного доступа / установки по целочисленной позиции или метке соответственно.
0 голосов
/ 14 января 2019

Вы можете использовать DataFrame.loc, это должно помочь вам начать: https://pandas.pydata.org/pandas-docs/stable/indexing.html

В вашем примере:

q.loc["2018-03-02","Manure"]=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...