Как избежать неявного исправления, сделанного Python с UserWarning после маскировки данных - PullRequest
0 голосов
/ 19 декабря 2018

Когда я маскирую свой набор данных другим, он обнаруживается с ключом UserWarning: логический ряд будет переиндексирован для соответствия индексу DataFrame.Как бы мне этого избежать?Python автоматически переиндексирует его, но заголовок этого столбца пуст, и я не могу переименовать его, поэтому я могу ссылаться на этот столбец в своем коде.Я также предпочитаю не полагаться на это неявное исправление.

Я попытался переименовать столбцы вручную двумя способами: pd.DataFrame.columns () или pd.DataFrame.rename ().По какой-то причине я либо получаю сообщение об ошибке, что ожидалось 3 элемента, а не 4, или добавленный индекс пустого столбца не будет переименован.

# select data and filter it which results in the error which fixes the dataframe but leaves the column name empty

stickData = data[['Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']]
filteredData = stickData[contactData['CONTACT'] == 1]

# moving forward from the error I tried using rename which does not error but also does nothing
filteredData.rename(index={0:'Index'})

# I also tried this
filteredData.rename(index={'':'Old_Index'})

# I even went and tried to add the names of the dataframe like so which resulted in ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
filteredData.columns = ['Old_Index','Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']

Текущий кадр данных в FilterData.head () выглядит такэто после неявного исправления от python:

Index              Time          Pitch Stick Position(IN)  Roll Stick Position (IN)
0       1421  240:19:06:40.200                  0.007263                 -0.028500
1       1422  240:19:06:40.400                  0.022327                  0.139893
2       1423  240:19:06:40.600                 -0.016409                  0.540756
3       1424  240:19:06:40.800                 -0.199329                  0.279971
4       1425  240:19:06:41.000                  0.013719                 -0.018069

Но я хотел бы отобразить с пометкой Old_index и более того, не полагаясь на неявное исправление:

Index   Old_index   Time          Pitch Stick Position(IN)  Roll Stick Position (IN)
1       1421  240:19:06:40.200                  0.007263                 -0.028500
2       1422  240:19:06:40.400                  0.022327                  0.139893
3       1423  240:19:06:40.600                 -0.016409                  0.540756
4       1424  240:19:06:40.800                 -0.199329                  0.279971
5       1425  240:19:06:41.000                  0.013719                 -0.018069

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

В вашем коде есть несколько ошибок:

  1. Не использовать цепное индексирование .Вместо этого используйте loc / iloc методы доступа.
  2. Присваивайте переменные при использовании методов, которые не работают на месте.
  3. Как правило, не используйте логические индексаторы, полученные из других фреймов данных.Если вы можете гарантировать выравнивание строк, извлеките представление массива NumPy с помощью pd.Series.values.

Например, это будет работать, если строки в contactData выровнять построк в filteredData

cols = ['Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']

filteredData = data.loc[(contactData['CONTACT'] == 1).values, cols]\
                   .rename(index={0:'Index'})

Обратите внимание, что мы можем связывать методы, такие как loc и rename, вместо явного присвоения обратно filteredData каждый раз.

0 голосов
/ 20 декабря 2018

Можете ли вы попробовать:

filteredData = stickData[contactData['CONTACT'] == 1].reset_index().rename(columns={'index': 'Old_index') 

или положить этот кусок куда-нибудь, у меня нет ваших образцов данных, я не могу проверить его

.reset_index().rename(columns={'index': 'Old_index')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...