请问怎么能用pandas筛选csv文件里一列包含字典key值的行,并根据字典value值分类
用这个学校字典匹配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
df = pd.read_csv("example.csv")
condition = lambda x: "my_key" in x
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来处理每个类别的数据。