#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"])]