Python Pandas:在遍历数据框时将信息附加到行

时间:2018-07-27 23:37:25

标签: python pandas loops 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("'","")

1 个答案:

答案 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