удаление диапазона строк в кадре данных pandas вызывает ключевую ошибку - PullRequest
0 голосов
/ 14 июля 2020

У меня есть несколько разных фреймов данных, из которых мне нужно удалить определенные строки. Каждый фрейм данных имеет одинаковую последовательность строк, но расположен в разных областях.

 Summary Results Report  Unnamed: 0  Unnamed: 1    Unnamed: 2 Unnamed: 3
0                DEM President         NaN         NaN           NaN        NaN
1                   Vote For 1         NaN         NaN           NaN        NaN
2                          NaN         NaN  Ballots By           NaN   Election
3                        TOTAL         NaN         NaN  Early Voting        NaN
4                          NaN         NaN        Mail           NaN        Day
5                   Tom Steyer         NaN         0 0             0          0
6                  Andrew Yang         NaN         0 0             0          0
7              John K. Delaney         NaN         0 0             0          0
8                  Cory Booker         NaN         0 0             0          0
9         Michael R. Bloomberg         NaN         4 1             1          2
10               Julian Castro         NaN         0 0             0          0
11            Elizabeth Warren         NaN         1 0             1          0
12         Marianne Williamson         NaN         0 0             0          0
13               Deval Patrick         NaN         0 0             0          0
14                 Robby Wells         NaN         0 0             0          0
15               Amy Klobuchar         NaN         3 1             2          0
16               Tulsi Gabbard         NaN         0 0             0          0
17              Michael Bennet         NaN         0 0             0          0
18              Bernie Sanders         NaN         4 0             1          3
19              Pete Buttigieg         NaN         0 0             0          0
20             Joseph R. Biden        21.0           0             3         18
21  Roque "Rocky" De La Fuente         NaN         0 0             0          0
22            Total Votes Cast        33.0           2             8         23
 Summary Results Report  Unnamed: 0  Unnamed: 1  Unnamed: 2    Unnamed: 3 Unnamed: 4  Unnamed: 5
0                  DEM US Senator         NaN         NaN         NaN           NaN        NaN         NaN
1                      Vote For 1         NaN         NaN         NaN           NaN        NaN         NaN
2                             NaN         NaN         NaN  Ballots By           NaN   Election         NaN
3                           TOTAL         NaN         NaN         NaN  Early Voting        NaN         NaN
4                             NaN         NaN         NaN        Mail           NaN        Day         NaN
5         Jack Daniel Foster, Jr.         4.0         NaN           0             0          4         NaN
6                 Mary (MJ) Hegar         4.0         NaN           1             3          0         NaN
7               Amanda K. Edwards         4.0         NaN           1             1          2         NaN
8                    D. R. Hunter         1.0         NaN           0             0          1         NaN
9                  Michael Cooper         3.0         NaN           0             0          3         NaN
10                     Chris Bell         1.0         NaN           0             0          1         NaN
11                     Royce West         3.0         NaN           0             0          3         NaN
12      Cristina Tzintzun Ramirez         5.0         NaN           0             3          2         NaN
13             Victor Hugo Harris         1.0         NaN           0             0          1         NaN
14                 Sema Hernandez         1.0         NaN           0             0          1         NaN
15                Adrian Ocegueda         0.0         NaN           0             0          0         NaN
16            Annie "Mama" Garcia         3.0         NaN           0             1          2         NaN
17            Total Votes Cast 30         NaN         NaN           2             8         20         NaN
18  DEM US Representative, Dist 1         NaN         NaN         NaN           NaN        NaN         NaN
19                     Vote For 1         NaN         NaN         NaN           NaN        NaN         NaN
20                            NaN         NaN         NaN  Ballots By           NaN   Election         NaN
21                          TOTAL         NaN         NaN         NaN  Early Voting        NaN         NaN
22                            NaN         NaN         NaN        Mail           NaN        Day         NaN
23                Hank Gilbert 26         NaN         NaN           1             6         19         NaN
24            Total Votes Cast 26         NaN         NaN           1             6         19         NaN

Я хочу удалить строку, содержащую Vote for 1 в первом столбце, а также следующие 3 ряды. Проблема в том, что они могут отображаться в нескольких областях, а иногда и несколько раз (например, во втором кадре данных). То, что у меня есть, похоже, работает в том смысле, что он удаляет необходимые строки, однако в конце он дает мне key error, который сообщает мне, что он повторяется без каких-либо данных.

for x in range(len(df)):
        if 'Vote For 1' in str(df.iloc[:,0][x]):
            y = x+3
            df = df.drop(df.loc[x:y].index)
            df.reset_index(drop=True,inplace=True)
            df.index.name=None
            print(df)

код выдает следующий результат:

           Summary Results Report  Unnamed: 0  Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4  Unnamed: 5
0                  DEM US Senator         NaN         NaN        NaN        NaN        NaN         NaN
1         Jack Daniel Foster, Jr.         4.0         NaN          0          0          4         NaN
2                 Mary (MJ) Hegar         4.0         NaN          1          3          0         NaN
3               Amanda K. Edwards         4.0         NaN          1          1          2         NaN
4                    D. R. Hunter         1.0         NaN          0          0          1         NaN
5                  Michael Cooper         3.0         NaN          0          0          3         NaN
6                      Chris Bell         1.0         NaN          0          0          1         NaN
7                      Royce West         3.0         NaN          0          0          3         NaN
8       Cristina Tzintzun Ramirez         5.0         NaN          0          3          2         NaN
9              Victor Hugo Harris         1.0         NaN          0          0          1         NaN
10                 Sema Hernandez         1.0         NaN          0          0          1         NaN
11                Adrian Ocegueda         0.0         NaN          0          0          0         NaN
12            Annie "Mama" Garcia         3.0         NaN          0          1          2         NaN
13            Total Votes Cast 30         NaN         NaN          2          8         20         NaN
14  DEM US Representative, Dist 1         NaN         NaN        NaN        NaN        NaN         NaN
15                Hank Gilbert 26         NaN         NaN          1          6         19         NaN
16            Total Votes Cast 26         NaN         NaN          1          6         19         NaN

Он выдает ошибку в конце с KeyError: 17. Приветствуются любые советы.

#### EDIT #### Я просто хотел дать обновленную информацию о коде, который, наконец, решил мою проблему. Я знаю, что он, вероятно, немного надежен, но он работает.

remove_strings=['Vote For 1','TOTAL']
    remove_strings_list = df.index[df['Summary Results Report'].isin(remove_strings)].tolist()
    df = df.drop(df.index[remove_strings_list])

1 Ответ

1 голос
/ 14 июля 2020

Не совсем уверен, каковы имена ваших столбцов, но если сводный столбец содержит имена и несколько имен, которые вы хотите удалить, это должно сработать. В противном случае вам, возможно, придется соответствующим образом изменить имя столбца.

strings_to_remove = ['Vote for 1', 'Total', 'NaN']
df[~df.summary.isin(strings_to_remove)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...