基于Python中列表的索引填充int64 DataFrame列

基于Python中列表的索引填充int64 DataFrame列,python,pandas,Python,Pandas,我有一个包含所有int64类型列的数据帧 City Val ... 0 3 1 1 2 43 2 0 32 3 1 54 然后,我有一个类别名称列表: names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto'] 我想做的是,根据名称列表索引,即0='Sydney'和1='Tokyo',用城市名称填充城市列 理想结果: City Val ... 0 Toronto

我有一个包含所有int64类型列的数据帧

  City  Val  ...
0    3    1  
1    2   43  
2    0   32  
3    1   54
然后,我有一个类别名称列表:

names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto']
我想做的是,根据
名称
列表索引,即0='Sydney'和1='Tokyo',用城市名称填充城市列

理想结果:

       City Val  ...
0   Toronto   1  
1 Vancouver  43  
2    Sydney  32  
3     Tokyo  54
我尝试了:
df['City'].loc[df['City'].isin(名称),df['City']]=names.index(df['City'])
,但出现了一个错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
并且,我想将城市列更改为类别类型

    df['City'] = df['City'].astype('category')
    df['City'].cat.set_categories(names, ordered=True, inplace=True)
枚举创建的词典一起使用

names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto']
df['City'] = df['City'].map(dict(enumerate(names)))
print (df)
        City  Val
0    Toronto    1
1  Vancouver   43
2     Sydney   32
3      Tokyo   54
详细信息

print (dict(enumerate(names)))
{0: 'Sydney', 1: 'Tokyo', 2: 'Vancouver', 3: 'Toronto'}
那么对于分类:

df['City'] = pd.CategoricalIndex(df['City'].map(dict(enumerate(names))),
                                 ordered=True, 
                                 categories=names)
或:

枚举创建的词典一起使用

names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto']
df['City'] = df['City'].map(dict(enumerate(names)))
print (df)
        City  Val
0    Toronto    1
1  Vancouver   43
2     Sydney   32
3      Tokyo   54
详细信息

print (dict(enumerate(names)))
{0: 'Sydney', 1: 'Tokyo', 2: 'Vancouver', 3: 'Toronto'}
那么对于分类:

df['City'] = pd.CategoricalIndex(df['City'].map(dict(enumerate(names))),
                                 ordered=True, 
                                 categories=names)
或:


你是个传奇,伙计!非常感谢。你是一个传奇,伙计!非常感谢。