【发布时间】:2018-01-05 16:22:15
【问题描述】:
我有一个包含 10 列的数据框。我想添加一个新列“age_bmi”,它应该是一个乘以“age”*“bmi”的计算列。 age 是一个 INT,bmi 是一个 FLOAT。
然后创建具有 11 列的新数据框。
我正在做的事情不太对劲。我认为这是一个语法问题。有什么想法吗?
谢谢
df2['age_bmi'] = df(['age'] * ['bmi'])
print(df2)
【问题讨论】:
我有一个包含 10 列的数据框。我想添加一个新列“age_bmi”,它应该是一个乘以“age”*“bmi”的计算列。 age 是一个 INT,bmi 是一个 FLOAT。
然后创建具有 11 列的新数据框。
我正在做的事情不太对劲。我认为这是一个语法问题。有什么想法吗?
谢谢
df2['age_bmi'] = df(['age'] * ['bmi'])
print(df2)
【问题讨论】:
您已将 age 和 bmi 组合在一个括号内,并将 df 视为函数而不是数据框。这里应该使用df来调用列作为DataFrame的属性-
df2['age_bmi'] = df['age'] *df['bmi']
【讨论】:
正如 Cory 所指出的,您将数据帧作为函数调用,这不会像您期望的那样工作。这里有 4 种方法来合并两列,在大多数情况下,您会使用第一种方法。
In [299]: df['age_bmi'] = df.age * df.bmi
或者,
In [300]: df['age_bmi'] = df.eval('age*bmi')
或者,
In [301]: df['age_bmi'] = pd.eval('df.age*df.bmi')
或者,
In [302]: df['age_bmi'] = df.age.mul(df.bmi)
【讨论】:
试试df2['age_bmi'] = df.age * df.bmi。
当您需要获取列的值时,您正在尝试将数据框作为函数调用,如果它是没有空格的小写名称,则可以通过键(如字典)或属性访问匹配一个内置的 DataFrame 方法。
前几天有人在评论中链接了这个,非常棒。我建议给它一个手表,即使你不做练习:https://www.youtube.com/watch?v=5JnMutdy6Fw
【讨论】:
df2 未定义,或者如果我使用df,它会说:```SettingWithCopyWarning:试图在一个切片的副本上设置一个值数据框。尝试改用 .loc[row_indexer,col_indexer] = value 查看文档中的警告:pandas.pydata.org/pandas-docs/stable/user_guide/…