列値の複雑な条件に基づいてデータ フレームの行を削除する場合、上記の方法でそれを記述するのは複雑になる可能性があります。常に機能する次のより簡単なソリューションがあります。「ヘッダー」を含む列を削除したいので、最初にその列をリストに取得するとします。
text_data = df['name'].tolist()
リストのすべての要素にいくつかの関数を適用し、それを panda シリーズに入れます。
text_length = pd.Series([func(t) for t in text_data])
私の場合、トークンの数を取得しようとしていました:
text_length = pd.Series([len(t.split()) for t in text_data])
ここで、データ フレームに上記の系列を含む列を 1 つ追加します。
df = df.assign(text_length = text_length .values)
これで、新しい列に次のような条件を適用できます。
df = df[df.text_length > 10]
def pass_filter(df, label, length, pass_type):
text_data = df[label].tolist()
text_length = pd.Series([len(t.split()) for t in text_data])
df = df.assign(text_length = text_length .values)
if pass_type == 'high':
df = df[df.text_length > length]
if pass_type == 'low':
df = df[df.text_length < length]
df = df.drop(columns=['text_length'])
return df