Skip to main content
 首页 » 编程设计

python之根据 Python 中列表的索引填充 int64 DataFrame 列

2025年05月04日19JustinYoung

我有一个包含所有 int64 类型列的 DataFrame。

  City  Val  ... 
0    3    1   
1    2   43   
2    0   32   
3    1   54 

然后,我有一个类别名称列表:

names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto'] 

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

理想的结果:

       City Val  ... 
0   Toronto   1   
1 Vancouver  43   
2    Sydney  32   
3     Tokyo  54 

我试过:df['City'].loc[df['City'].isin(names), 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) 

请您参考如下方法:

使用Series.map使用 enumerate 创建的字典:

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) 

或者:

df['City'] = (df['City'].map(dict(enumerate(names))) 
                       .astype('category', ordered=True, categories=names))