проблема с удалением фрейма данных pandas, хотите удалить определенные строки?

#python #pandas #dataframe

Вопрос:

У меня возникла проблема с удалением определенных строк из моего фрейма данных. Я хочу удалить строки, соответствующие номеру учетной записи. Вот код:

 def main():
    
    # Collecting data from .csv
    df1 = pd.read_csv("./2018/Member last activited.csv", 
    sep=";", dtype={"Account Number": str}, encoding='ISO-8859-1', engine = 'python')

    accountnum = df1["Account Number"]

    # Collecting data from .csv
    df2 = pd.read_csv("./2019/Member last activited062019.csv", 
    sep=";", dtype={"Account Number": str, "Phone Number": str}, encoding='ISO-8859-1', engine = 'python')

    accountnum2 = df2["Account Number"]

    # comparing account numbers and removing them if matched
 
    tmp2 = {"ID": "0",
        "ACCOUNTNUM": "0"}
    tmplist = []
    for x, y in accountnum.items():
        for z, w in accountnum2.items():
            if y == w:
               tmp2 = {"ID": z, "ACCOUNTNUM": w }
               tmplist.append(tmp2)
    index = 0
    for x in df2["Account Number"]:
        if x == tmplist[index]["ACCOUNTNUM"]:
            df2.drop(index, inplace=True)
        index  = 1 
 

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

1. номер учетной записи 2 = df1[«Номер учетной записи»], я думаю, вы хотели использовать здесь df2. Пожалуйста, предоставьте более подробную информацию о проблеме и цели здесь.

2. да, ты прав. Опечатка

3. теперь в нем указано, что индекс списка находится вне диапазона. Есть ли лучший способ сделать это?

4. Вы хотите удалить строки из df1 или df2?

Ответ №1:

Вы можете использовать .isin() метод серии панд

 df2["Account Number"].isin(df1["Account Number"])
 

Это даст вам ряд логических значений, которые будут верны для всех строк, Account Number в df2 df1 которых также присутствует in. Поскольку вы хотите удалить эти строки, вы можете использовать индексацию рядов вместе с ~ (оператором отрицания), как это:

 df3 = df2[~df2["Account Number"].isin(df1["Account Number"])]