Skip to main content
 首页 » 编程设计

python之Python 中数据帧不同值的高效转换

2025年05月04日21pengyingh

我有这样的数据:

republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y 
republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,? 
democrat,?,y,y,?,y,y,n,n,n,n,y,n,y,y,n,n 
democrat,n,y,y,n,?,y,n,n,n,n,y,n,y,n,n,y 
democrat,y,y,y,n,y,y,n,n,n,n,y,?,y,y,y,y 
democrat,n,y,y,n,y,y,n,n,n,n,n,n,y,y,y,y 
democrat,n,y,n,y,y,y,n,n,n,n,n,n,?,y,y,y 
republican,n,y,n,y,y,y,n,n,n,n,n,n,y,y,?,y 

来自 source . 我想以最有效的方式将所有数据 (dataframe) 中所有不同的不同值更改为数值。 在上面提到的示例中,我想转换 republican-> 1 和 democrat -> 2,y ->3,n->4 和? -> 5(或 NULL)。

我尝试使用以下内容:

# Convert string column to integer 
def str_column_to_int(dataset, column): 
    class_values = [row[column] for row in dataset] 
    unique = set(class_values) 
    lookup = dict() 
    for i, value in enumerate(unique): 
        lookup[value] = i 
    for row in dataset: 
        row[column] = lookup[row[column]] 
    return lookup 

但是,我不确定使用 Pandas 是否更高效,或者是否有其他更好的解决方案。 (这应该对任何数据源都是通用的)。 下面是使用 Pandas 将数据转换为 dataframe 的过程:

import pandas as pd 
file_path = 'https://archive.ics.uci.edu/ml/machine-learning-databases/voting-records/house-votes-84.data' 
dataset = pd.read_csv(file_path, header=None) 

请您参考如下方法:

v = df.values 
 
f = pd.factorize(v.ravel())[0].reshape(v.shape) 
 
pd.DataFrame(f) 
 
   0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16 
0   0   1   2   1   2   2   2   1   1   1   2   3   2   2   2   1   2 
1   0   1   2   1   2   2   2   1   1   1   1   1   2   2   2   1   3 
2   4   3   2   2   3   2   2   1   1   1   1   2   1   2   2   1   1 
3   4   1   2   2   1   3   2   1   1   1   1   2   1   2   1   1   2 
4   4   2   2   2   1   2   2   1   1   1   1   2   3   2   2   2   2 
5   4   1   2   2   1   2   2   1   1   1   1   1   1   2   2   2   2 
6   4   1   2   1   2   2   2   1   1   1   1   1   1   3   2   2   2 
7   0   1   2   1   2   2   2   1   1   1   1   1   1   2   2   3   2