Python熊猫:在通过数据帧循环时将信息从字典追加到行

时间:2018-07-28 01:54:45

标签: python pandas dictionary append

我想知道一种更好的在循环中将信息附加到数据框的方法,特别是从字典将信息列添加到数据框。下面的代码在技术上可以正常工作,但是在随后的分析中,我希望保留numpy / pandas的数据分类,以便能够将丢失的数据或奇数有效地分类为np.nan或null。任何提示都很棒。

raw_data = {'first_name': ['John', 'Molly', 'Tina', 'Jake', 'Amy'], 
'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'], 
'age': [42, 17, 16, 24, '']}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age'])
headers = df.columns.values
count = 0
adults = {'John':True,'Molly':False}
for index, row in df.iterrows():
    count += 1
    if str(row['first_name']) in adults:
        adult = adults[str(row['first_name'])]
    else:
        adult = 'null'
    headers = np.append(headers,'ADULT')
    vals = np.append(row.values,adult)
    if count == 1:
        print ','.join(headers.tolist())
        print str(vals.tolist()).replace('[','').replace(']','').replace("'","")
    else:
        print str(vals.tolist()).replace('[','').replace(']','').replace("'","")

输出:

first_name,last_name,age,ADULT
John, Miller, 42, True
Molly, Jacobson, 20, True
Tina, Ali, 16, NA
Jake, Milner, 24, NA
Amy, Cooze, , NA

1 个答案:

答案 0 :(得分:0)

我认为您可以简单地将looplambdaif条件一起使用:

else

在上面,df['ADULT'] = df['first_name'].apply(lambda v: adults[v] if v in adults else np.nan) print(df.to_csv(index=False, na_rep='NA')) # Output is: # first_name,last_name,age,ADULT # John,Miller,42,True # Molly,Jacobson,17,False # Tina,Ali,16,NA # Jake,Milner,24,NA # Amy,Cooze,,NA 仅查找是否adults[val] if val in adults else np.nan,即每一行的val是否在字典中,如果是,则为新列保留值,否则first_name < / p>

您可以使用np.nan以上述格式打印,此处无需指定文件名,它会转换为以逗号分隔的字符串,而to_csv指定用于缺失值的字符串。