首页 > 解决方案 > 使用 Pandas 进行数据清理

问题描述

我有一个由文本数据组成的数据框列,我需要根据以下条件对其进行过滤:

前任:

KFLL

KSDS

KMDK

MDDL

在这种情况下,例如,我必须删除第一个字符串,因为 n-1 位置的字符不是“D”,最后一个,因为字符“M”出现在 n-2位置。

如何将其应用于整个数据框列?

标签: pythonpandasdata-miningdata-cleaning

解决方案


这可以满足您的需求。使用列表推导可能会写得更短,但至少这是可读的。它假定字符串都超过 3 个字符,否则会出现 IndexError。在这种情况下,您需要添加一个 try/except

from collections import Counter

import pandas as pd

df = pd.DataFrame(data=list(["KFLL", "KSDS", "KMDK", "MDDL"]), columns=["code"])
print("original")
print(df)
mask = list()
for code in df["code"]:
    flag = False
    if code[-2] == "D":
        counter = Counter(list(code))
        if counter["M"] == 0 or (counter["M"] == 1 and code[-3] == "M"):
            flag = True
    mask.append(flag)
df["mask"] = mask
df2 = df[df["mask"]].copy()
df2.drop("mask", axis=1, inplace=True)
print("new")
print(df2)

输出看起来像这样

original
   code
0  KFLL
1  KSDS
2  KMDK
3  MDDL
new
   code
1  KSDS
2  KMDK

推荐阅读