str - python plot title




Como descartar uma lista de linhas do dataframe do Pandas? (6)

Aqui está um exemplo pouco específico, gostaria de mostrar. Digamos que você tenha muitas entradas duplicadas em algumas de suas linhas. Se você tiver entradas de string, você poderia facilmente usar métodos de string para encontrar todos os índices a serem soltos.

ind_drop = df[df['column_of_strings'].apply(lambda x: x.startswith('Keyword'))].index

E agora para soltar essas linhas usando seus índices

new_df = df.drop(idx)

Eu tenho um dataframe df:

>>> df
                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20060630   6.590       NaN      6.590   5.291
       20060930  10.103       NaN     10.103   7.981
       20061231  15.915       NaN     15.915  12.686
       20070331   3.196       NaN      3.196   2.710
       20070630   7.907       NaN      7.907   6.459

Então eu quero soltar linhas com certos números de seqüência que indicaram em uma lista, suponha que aqui é [1,2,4], então à esquerda:

                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20061231  15.915       NaN     15.915  12.686
       20070630   7.907       NaN      7.907   6.459

Como ou qual função pode fazer isso?


Em um comentário à resposta do @theodros-zelleke, @ j-jones perguntou sobre o que fazer se o índice não fosse único. Eu tive que lidar com tal situação. O que eu fiz foi renomear as duplicatas no índice antes de chamar drop() , a la:

dropped_indexes = <determine-indexes-to-drop>
df.index = rename_duplicates(df.index)
df.drop(df.index[dropped_indexes], inplace=True)

onde rename_duplicates() é uma função que defini que passou pelos elementos do índice e renomeou as duplicatas. Eu usei o mesmo padrão de renomeação que pd.read_csv() usa nas colunas, ou seja, "%s.%d" % (name, count) , onde name é o nome da linha e count é quantas vezes ocorreu anteriormente .



Se eu quiser soltar uma linha que tenha, digamos, o índice x , eu faria o seguinte:

df = df[df.index != x]

Se eu quisesse descartar vários índices (digamos que esses índices estão na lista unwanted_indices ), eu faria:

desired_indices = [i for i in len(df.index) if i not in unwanted_indices]
desired_df = df.iloc[desired_indices]

Use DataFrame.drop e passe uma série de rótulos de índice:

In [65]: df
Out[65]: 
       one  two
one      1    4
two      2    3
three    3    2
four     4    1


In [66]: df.drop(df.index[[1,3]])
Out[66]: 
       one  two
one      1    4
three    3    2

Você também pode passar para o DataFrame.drop o rótulo em si (em vez de Series de rótulos de índice):

In[17]: df
Out[17]: 
            a         b         c         d         e
one  0.456558 -2.536432  0.216279 -1.305855 -0.121635
two -1.015127 -0.445133  1.867681  2.179392  0.518801

In[18]: df.drop('one')
Out[18]: 
            a         b         c         d         e
two -1.015127 -0.445133  1.867681  2.179392  0.518801

Qual é equivalente a:

In[19]: df.drop(df.index[[0]])
Out[19]: 
            a         b         c         d         e
two -1.015127 -0.445133  1.867681  2.179392  0.518801






pandas