用pandas筛选csv文件里一列包含字典key值的行

请问怎么能用pandas筛选csv文件里一列包含字典key值的行,并根据字典value值分类

img

用这个学校字典匹配applicant里含有学校的行,并且根据字典的值分类储存

基于Monster 组和GPT的调写:
假设你有一个名为"applicants.csv"的CSV文件,其中包含"Applicant","PATkind"和"Title"列,你可以使用以下代码来筛选和分类:

import pandas as pd

# 创建学校字典
school_dict = {'山东钢铁股份有限公司大学': 'School A', '辽宁科技学院': 'School B'}

# 读取CSV文件
df = pd.read_csv('applicants.csv')

# 筛选出包含学校名称的行
df = df[df['Applicant'].str.contains('|'.join(school_dict.keys()))]

# 将学校名称转换为对应的分类
df['School Category'] = df['Applicant'].replace(school_dict)

# 保存结果到新的CSV文件
df.to_csv('classified_applicants.csv', index=False)


这里的关键步骤是使用str.contains()方法筛选出包含学校名称的行,并使用replace()方法将学校名称转换为对应的分类。最后,使用to_csv()方法将结果保存到新的CSV文件中

首先,读取csv文件并将其转换为Pandas DataFrame:

import pandas as pd

df = pd.read_csv('your_file.csv')

接下来,假设您的csv文件中包含一个名为 dict_col 的列,其中包含字典数据。您可以使用 apply 方法将每一行的字典数据转换为Pandas Series,并将其与原始DataFrame合并。这将创建一个新的DataFrame,其中每一行都包含字典数据的键(key)和值(value):

dict_df = df['dict_col'].apply(pd.Series).merge(df, left_index=True, right_index=True)

然后,您可以使用Pandas的 isin 方法选择包含特定字典键(key)值的行:

selected_df = dict_df[dict_df['your_key'].isin(['key_value_1', 'key_value_2', ...])]

最后,您可以使用Pandas的 groupby 方法按照字典值(value)分类:

grouped_df = selected_df.groupby(['your_value']).agg({'your_column': 'sum'})

这将根据您选择的字典键(key)值对行进行筛选,并对相应的字典值(value)进行分组,并对指定的列求和(在这个例子中是 your_column)。

import pandas as pd

读取CSV文件

df = pd.read_csv("example.csv")

使用lambda表达式定义筛选条件,筛选my_column列中包含key值为"my_key"的行

condition = lambda x: "my_key" in x

使用apply方法对my_column列中的每个单元格应用筛选条件,并返回符合条件的行

filtered_df = df[df["my_column"].apply(condition)]

输出筛选结果

print(filtered_df)

参考GPT和自己的思路:假设你有一个CSV文件,其中包含一个名为"applicant"的列,每个单元格都包含一个字典,以及一个包含"school"名称和对应"category"类别的字典。你可以使用Pandas进行如下筛选和分类:

导入必要的库和数据

import pandas as pd

# 读取CSV文件
df = pd.read_csv("your_file.csv")
# 定义包含学校名称和类别的字典
school_dict = {"school_name_1": "category_1", "school_name_2": "category_2", ...}


2 筛选出包含学校名称的行

# 使用apply函数筛选出包含学校名称的行
school_names = school_dict.keys()  # 获取所有学校名称
df_filtered = df[df["applicant"].apply(lambda x: any([name in x.keys() for name in school_names]))]

3 根据字典的值分类储存

# 使用apply函数根据字典的值分类储存
df_grouped = df_filtered.groupby(df_filtered["applicant"].apply(lambda x: school_dict.get(next(iter([k for k in x.keys() if k in school_names])), "other_category")))

在上面的代码中,我们首先使用apply函数筛选出包含学校名称的行。然后,我们使用groupby函数根据字典值分类,其中groupby函数的参数是一个Series,包含了每一行的类别信息。next和iter的组合用于从字典的键列表中获取第一个匹配的学校名称,然后使用get函数获取对应的类别。如果没有匹配的学校名称,则默认类别为"other_category"。最后,我们可以通过循环遍历df_grouped来处理每个类别的数据。