我想知道在循环中将信息附加到数据框的更好方法。具体而言,以条件方式将信息列添加到数据帧。下面的代码在技术上可以正常工作,但是除了它草率的事实之外,更重要的是,随着所有内容都转换为字符串,每个单元格中的信息(例如数据类型)都会丢失。任何提示都很棒。
raw_data = {'first_name': ['John', 'Molly', 'Tina', 'Jake', 'Amy'],
'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
'age': [42, 20, 16, 24, '']}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age'])
headers = df.columns.values
count = 0
for index, row in df.iterrows():
count += 1
if row['age'] > 18:
adult = True
else:
adult = False
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("'","")
答案 0 :(得分:2)
这似乎可以提供所需的结果(至少与循环相同):
df['ADULT'] = np.where(pd.to_numeric(df.age) > 18, True, False)
>>> df
first_name last_name age ADULT
0 John Miller 42 True
1 Molly Jacobson 20 True
2 Tina Ali 16 False
3 Jake Milner 24 True
4 Amy Cooze False
如@Wen所指出的,这更简单了:
df['ADULT'] = pd.to_numeric(df.age) > 18