如果序列中的单词长度>3,则过滤 Dataframe

vh0rcniy  于 2021-08-25  发布在  Java
关注(0)|答案(3)|浏览(280)

社区!我真的很感谢我在学习python的过程中得到的所有支持!
我得到了以下 Dataframe :

d = {'name': ['john', 'mary', 'james'], 'area':[['IT', 'Resources', 'Admin'], ['Software', 'ITS', 'Programming'], ['Teaching', 'Research', 'KS']]}
df = pd.DataFrame(data=d)


我的目标是:

换句话说,如果单词的长度在列'area'>3的列表中,请删除它们。
我正在尝试这样的事情,但我真的被卡住了

处理这种情况的最佳方法是什么?
再次感谢!!

r1zk6ea1

r1zk6ea11#

结合 .map 具有列表理解能力:

df['area'] = df['area'].map(lambda x: [e for e in x if len(e)>3])

0         [Resources, Admin]
1    [Software, Programming]
2       [Teaching, Research]

解释:

x = ["Software", "ABC", "Programming"]

# return e for every element in x but only if length of element is larger than 3

[e for e in x if len(e)>3]
raogr8fs

raogr8fs2#

您可以展开所有列表,然后继续筛选 str 长度,然后通过使用 list :

df = df.explode("area")
df = df[df["area"].str.len() > 3].groupby("name", as_index=False).agg(list)

# name                     area

# 0  james     [Teaching, Research]

# 1   john       [Resources, Admin]

# 2   mary  [Software, Programming]
mfpqipee

mfpqipee3#

在构建 Dataframe 之前。

一种简单有效的方法是创建一个新的键列表:“area”,其中只包含长度大于3的字符串。例如:

d = {'name': ['john', 'mary', 'james'], 'area':['IT', 'Resources', 'Admin'], ['Software', 'ITS', 'Programming'], ['Teaching', 'Research', 'KS']]}

# Retrieving the areas from d.

area_list = d['area']

# Copying all values, whose length is larger than 3, in a new list.

filtered_area_list = [a in area_list if len(3) > 3]

# Replacing the old list in the dictionary with the new one.

d['area'] = filtered_area_list

# Creating the dataframe.

df = pd.DataFrame(data=d)

在构建 Dataframe 之后。

如果数据位于数据框中,则可以使用“Map”功能:

df['area'] = df['area'].map(lambda a: [e for e in a if len(e) > 3])

相关问题