Python добавляет строки в dataframe, которые переворачиваются

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть набор данных, импортированный из файла CSV в dataframe на Python. Я хочу удалить некоторые определенные строки из этого фрейма данных и добавить их в пустой фрейм данных. До сих пор я пытался удалить строки 1 и 0 из вызываемого «большого» df фрейма данных и использовать их для dff использования этого кода:

 dff = pd.DataFrame() #Create empty dataframe

for x in range(0, 2):
    dff = dff.append(df.iloc[x]) #Append the first 2 rows from df to dff
    #How to remove appended rows from df?
  

Похоже, это работает, однако столбцы переворачиваются, например, df если есть порядок A, B, C, затем dff будет получен порядок C, B, A; кроме этого, данные верны. Также как мне удалить определенную строку из dataframe?

Ответ №1:

Если ваша цель — просто удалить первые две строки в другой dataframe, вам не нужно использовать цикл, просто разрежьте:

 import pandas as pd
df = pd.DataFrame({"col1": [1,2,3,4,5,6], "col2": [11,22,33,44,55,66]})

dff = df.iloc[:2]
df = df.iloc[2:]
  

Даст вам:

 dff
Out[6]: 
   col1  col2
0     1    11
1     2    22

df
Out[8]: 
   col1  col2
2     3    33
3     4    44
4     5    55
5     6    66
  

Если ваш список желаемых строк более сложный, чем только первые два, в вашем примере более общий метод может быть:

 dff = df.iloc[[1,3,5]]  # Your list of row numbers
df = df.iloc[~df.index.isin(dff.index)]
  

Это означает, что даже если столбец индекса не содержит последовательных целых чисел, все строки, которые вы использовали для заполнения dff , будут удалены df .

Ответ №2:

Мне удалось решить это, выполнив:

 dff = pd.DataFrame()
dff = df.iloc[:0]
  

Это скопирует первую строку df (заголовки столбцов, например, A, B, C) в dff, затем добавит работу, как и должно быть, с любой строкой, и строка, например, 1150, может быть добавлена и удалена с помощью:

 dff = dff.append(df.iloc[1150])
df = df.drop(df.index[1150])
  

Комментарии:

1. Пожалуйста, имейте в виду, что это не будет работать в цикле, поскольку iloc и index не являются взаимозаменяемыми. Например, если ваш df последовательно пронумерован, после удаления индекса 1150 iloc[1151] будет указывать на index[1152]