函数未在pandas数据帧上正确应用

时间:2017-10-01 20:56:10

标签: python pandas dataframe

我对整个大熊猫和numpy世界都很陌生。我有python的经验,但不是这方面。我试图使用数据集,我发现了一个我无法解释的问题。如果有经验的人帮助我理解其中出现的问题,那将是很棒的。

我有一个包含三个字段的CSV文件。 "年龄","工人阶级"和"收入"。标题丢失了所以我按以下方式加载了CSV -

import numpy as np
import pandas as pd

df = pd.read_csv("test.csv", index_col=False, header=None, names=["age", "workclass", "income"])

现在最后一列中的数据采用这种格式 - "< = 50K"或"> 50K"。我想将数据转移到" 0"或" 1"基于上面的值。所以0为"< = 50K"和#34;> 50K"。为此,我写了这行代码

def test_func(x):
    if x == "<=50K":
        return "0"
    else:
        return "1"

df['income'] = df['income'].apply(test_func)

这使得所有列成为&#34; 1&#34;!我在test_func中做了一些打印,看起来x的值正确,x的类型是&#34; str&#34;。我无法理解,在这种情况下,为什么总会出现&#34; else&#34;部分正在执行,而不是&#34;如果&#34;部分。我究竟做错了什么?

我忽略了这可能是一个非常愚蠢的错误。我不确定,任何帮助都会很棒

提前致谢。

3 个答案:

答案 0 :(得分:3)

选项1
title = response.xpath('//h1[@id="title"]/span/text()').extract()

astype

选项2
df['income'] = df['income'].eq("<=50K").astype(int)

np.where

答案 1 :(得分:2)

我会这样做:

df.loc[df['income']=='<=50K','income'] = 0
df.loc[df['income']!='<=50K','income'] = 1

答案 2 :(得分:2)

Alex的解决方案是经典的,但numpy中有一个内置的if / this函数,名为np.where。我不是很熟悉它,但它看起来像......

df['income'] = np.where((df['income']=='<=50K','income'), 1 ,0)

Referenced np.where Stackoverflow Question