我想知道一种在循环中将信息 append 到数据帧的更好方法。具体来说,以有条件的方式将信息列添加到数据帧中。下面的代码在技术上是可行的,但除了它很草率之外,更重要的是,当所有内容都转换为字符串时,每个单元格中的数据类型等信息都会丢失。任何提示都会很棒。
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("'","")
最佳答案
这似乎给出了您想要的结果(至少,它与您的循环结果相同):
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
关于Python Pandas : appending information to row while looping through dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566746/