如何为pandas列赋值?

时间:2017-01-12 10:30:05

标签: python pandas

我有一个DataFrame,比如说一列是:

{'university':'A','B','A','C'}

我想将列更改为:

{'university':1,2,1,3}

根据想象的词典:

{'A':1,'B':2,'C':3}

如何完成这项工作?

ps:我解决了原来的问题,这是我自己的电脑设置。 我相应地改变了问题,以便更有帮助。

2 个答案:

答案 0 :(得分:1)

我认为您dict - d需要map

df.university = df.university.map(d)

如果需要将对象编码为枚举类型或分类变量,请使用factorize

df.university = pd.factorize(df.university)[0] + 1

样品:

d = {'A':1,'B':2,'C':3}
df = pd.DataFrame({'university':['A','B','A','C']})
df['a'] = df.university.map(d)
df['b'] = pd.factorize(df.university)[0] + 1
print (df)
  university  a  b
0          A  1  1
1          B  2  2
2          A  1  1
3          C  3  3

我尝试重写你的功能:

def given_value(column):
    columnlist=column.drop_duplicates()
    #reset to default monotonic increasing (0,1,2, ...)
    columnlist = columnlist.reset_index(drop=True)
    #print (columnlist)
    #swap index and values to new Series columnlist_rev
    columnlist_rev= pd.Series(columnlist.index, index=columnlist.values)
    #map by columnlist_rev  
    column=column.map(columnlist_rev)

    return column

print (given_value(df.university))
0    0
1    1
2    0
3    2
Name: university, dtype: int64

答案 1 :(得分:1)

AttributeError: 'DataFrame' object has no attribute 'column'

您的回答是在异常声明中写的! DataFrame对象没有名为column的属性,这意味着您无法在代码中的任何位置调用DataFrame.column。我相信您的问题存在于此处发布的内容之外,可能是您第一次将数据作为DataFrame导入的部分附近。我的猜测是,当您命名列时,您执行了类似df.column = [university]而不是df.columns = [university]的操作。这很重要。如果您仔细阅读Traceback,您将能够准确找出引发错误的行。

此外,在您发布的功能中,您不需要参数df,因为在此过程中任何时候都不使用该参数。