如何在Pandas DataFrame

时间:2015-07-01 17:21:57

标签: python arrays numpy pandas scikit-learn

假设我有一个DataFrame,其中一列(我们称之为' power')保存从1到10000的整数值。我想生成一个numpy数组,其中包含,对于每一行,一个值指示DataFrame的相应行是否具有“电源”中的值。列大于9000.

我可以这样做:

def categorize(frame):
    return np.array(frame['power']>9000)

这将给我一个布尔数组,可以使用True和False进行测试。但是,假设我希望数组的内容为1和-1,而不是True和False。如何在不必遍历框架中的每一行的情况下完成此操作?

对于后台,该应用程序正在通过使用scikit-learn的机器学习准备二进制分类数据。

1 个答案:

答案 0 :(得分:2)

您可以将np.where用于此类内容。

请考虑以下事项:

import pandas as pd

df = pd.DataFrame({
    'a': range(20)})
df['even'] = df.a % 2 == 0

所以现在even是一个布尔列。要按照您喜欢的方式创建数组,可以使用

np.where(df.even, 1, -1)

如果您愿意,可以将其分配回DataFrame:

df['foo'] = np.where(df.even, 1, -1)

进一步查看pandas cookbook这类内容。