【发布时间】:2019-09-03 16:02:21
【问题描述】:
我有 3 个文件正在读入数据帧 (https://pastebin.com/v7BnSH3s)
map_df: 将data_file 标头映射到codes_df 标头
Field Name Code Name
Gender gender_codes
Race race_codes
Ethnicity ethnicity_codes
code_df:有效代码
gender_codes race_codes ethnicity_codes
1 1 1
2 2 2
3 3 3
4 4 4
NaN NaN 5
NaN NaN 6
NaN NaN 7
data_df:需要对照代码检查的实际数据
Name Gender Race Ethnicity
Alex 99 1 7
Cindy 2 4 5
Tom 1 99 1
问题:
我需要确认data_df 每一列中的每个值都是有效代码。如果没有,我需要将Name、无效值和列标题标签写为新列。所以我的示例data_df 将为gender_codes 检查生成以下数据框:
result_df:
Name Value Column
Alex 99 Gender
背景:
- 我的实际数据文件有 100 多列。
- 一个代码列可以映射到
data_df中的多个列。 - 我目前没有使用
map_df除了知道哪些列映射到 哪些代码。但是,如果我可以将其合并到我的脚本中,那就是 理想。
我尝试过的:
我目前正在将每个代码列发送到一个列表,删除nan 字符串,使用loc 和isin 执行查找,然后设置result_df...
# code column to list
gender_codes = codes_df["gender_codes"].tolist()
# remove nan string
gender_codes = [gender_codes
for gender_codes in gender_codes
if str(gender_codes) != "nan"]
# check each value against code list
result_df = data_df.loc[(~data_df.Gender.isin(gender_codes))]
result_df = result_df.filter(items = ["Name","Gender"])
result_df.rename(columns = {"Gender":"Value"}, inplace = True)
result_df['Column'] = 'Gender'
这很有效,但显然是非常原始的,不会随我的数据集扩展。我希望找到一种迭代和pythonic的方法来解决这个问题。
编辑: 使用 np.nan 修改数据集
【问题讨论】:
-
所以
codes_df中的列应该是gender_code等而不是gender_list等? -
@anky_91,是的,刚刚修好了。谢谢
标签: python-3.x pandas