我想知道一种更好的在循环中将信息附加到数据框的方法,特别是从字典将信息列添加到数据框。下面的代码在技术上可以正常工作,但是在随后的分析中,我希望保留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
答案 0 :(得分:0)
我认为您可以简单地将loop
与lambda
和if
条件一起使用:
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
指定用于缺失值的字符串。