python - 使用合并用名称替换标签

标签 python pandas csv

我正在尝试弄清楚如何进行合并。我有一个 labels.csv,其中包含我必须用来替换 dat.csv 中同一字段的数字的名称

我的dat.csv如下:

Id,Help in household,Maths,Reading,Science,Social
11011001001,4,20.37,,27.78,
11011001002,3,12.96,,38.18,
11011001003,4,27.78,70,,
11011001004,4,,56.67,,36
11011001005,1,,,14.55,8.33
11011001006,4,,23.33,,30
11011001007,4,40.74,70,,
11011001008,3,,26.67,,22.92
11011001009,2,24.07,,25.45,
11011001010,4,18.52,26.67,,
11011001012,2,37.04,16.67,,
11011001013,4,20.37,,20,
11011001014,2,,,29.63,35.42
11011001015,4,27.78,66.67,,
11011001016,0,18.52,,,
11011001017,4,,,42.59,32
11011001018,2,16.67,,,
11011001019,3,,,21.82,
11011001020,4,,20,,16
11011001021,1,,,18.52,16.67

我的labels.csv如下:

Column,Name,Level,Rename
Help in household,Every day,4,Every day
Help in household,Never,1,Never
Help in household,Once a month,2,Once a month
Help in household,Once a week,3,Once a week

我的程序如下:

import pandas as pd

df = pd.read_csv('dat.csv')
labels = pd.read_csv('labels.csv')
df=df.merge(labels,left_on='Help in household',right_on='Name',how='left')

print df

但是,这些名称并没有按照我想要的方式显示。

          STUID Help in household  Maths %  Reading %  Science %  Social %  \
0   11011001001                 4    20.37        NaN      27.78       NaN   
1   11011001002                 3    12.96        NaN      38.18       NaN   
2   11011001003                 4    27.78      70.00        NaN       NaN   
3   11011001004                 4      NaN      56.67        NaN     36.00   
4   11011001005                 1      NaN        NaN      14.55      8.33   
5   11011001006                 4      NaN      23.33        NaN     30.00   
6   11011001007                 4    40.74      70.00        NaN       NaN   
7   11011001008                 3      NaN      26.67        NaN     22.92   
8   11011001009                 2    24.07        NaN      25.45       NaN   
9   11011001010                 4    18.52      26.67        NaN       NaN   
10  11011001012                 2    37.04      16.67        NaN       NaN   
11  11011001013                 4    20.37        NaN      20.00       NaN   
12  11011001014                 2      NaN        NaN      29.63     35.42   
13  11011001015                 4    27.78      66.67        NaN       NaN   
14  11011001016                 0    18.52        NaN        NaN       NaN   
15  11011001017                 4      NaN        NaN      42.59     32.00   
16  11011001018                 2    16.67        NaN        NaN       NaN   
17  11011001019                 3      NaN        NaN      21.82       NaN   
18  11011001020                 4      NaN      20.00        NaN     16.00   
19  11011001021                 1      NaN        NaN      18.52     16.67   

   Column Name  Level Rename  
0     NaN  NaN    NaN    NaN  
1     NaN  NaN    NaN    NaN  
2     NaN  NaN    NaN    NaN  
3     NaN  NaN    NaN    NaN  
4     NaN  NaN    NaN    NaN  
5     NaN  NaN    NaN    NaN  
6     NaN  NaN    NaN    NaN  
7     NaN  NaN    NaN    NaN  
8     NaN  NaN    NaN    NaN  
9     NaN  NaN    NaN    NaN  
10    NaN  NaN    NaN    NaN  
11    NaN  NaN    NaN    NaN  
12    NaN  NaN    NaN    NaN  
13    NaN  NaN    NaN    NaN  
14    NaN  NaN    NaN    NaN  
15    NaN  NaN    NaN    NaN  
16    NaN  NaN    NaN    NaN  
17    NaN  NaN    NaN    NaN  
18    NaN  NaN    NaN    NaN  
19    NaN  NaN    NaN    NaN  

我做错了什么?

最佳答案

好的,这是你想要的吗?

df['Name'] = df['Help in household'].map(labels.set_index('Level')['Name'])

输出:

Id  Help in household  Maths  Reading  Science  Social  \
0   11011001001                  4  20.37      NaN    27.78     NaN   
1   11011001002                  3  12.96      NaN    38.18     NaN   
2   11011001003                  4  27.78    70.00      NaN     NaN   
3   11011001004                  4    NaN    56.67      NaN   36.00   
4   11011001005                  1    NaN      NaN    14.55    8.33   
5   11011001006                  4    NaN    23.33      NaN   30.00   
6   11011001007                  4  40.74    70.00      NaN     NaN   
7   11011001008                  3    NaN    26.67      NaN   22.92   
8   11011001009                  2  24.07      NaN    25.45     NaN   
9   11011001010                  4  18.52    26.67      NaN     NaN   
10  11011001012                  2  37.04    16.67      NaN     NaN   
11  11011001013                  4  20.37      NaN    20.00     NaN   
12  11011001014                  2    NaN      NaN    29.63   35.42   
13  11011001015                  4  27.78    66.67      NaN     NaN   
14  11011001016                  0  18.52      NaN      NaN     NaN   
15  11011001017                  4    NaN      NaN    42.59   32.00   
16  11011001018                  2  16.67      NaN      NaN     NaN   
17  11011001019                  3    NaN      NaN    21.82     NaN   
18  11011001020                  4    NaN    20.00      NaN   16.00   
19  11011001021                  1    NaN      NaN    18.52   16.67   

            Name  
0      Every day  
1    Once a week  
2      Every day  
3      Every day  
4          Never  
5      Every day  
6      Every day  
7    Once a week  
8   Once a month  
9      Every day  
10  Once a month  
11     Every day  
12  Once a month  
13     Every day  
14           NaN  
15     Every day  
16  Once a month  
17   Once a week  
18     Every day  
19         Never  

关于python - 使用合并用名称替换标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955218/

相关文章:

csv - 将缺失值的整数导出到 Pandas 中的 csv

python - 使用替换的正则表达式来转换数字

python - Scikit-Learn 给出不正确的 R 平方值

python - 索引范围对象时是否使用迭代协议(protocol)?

python - 忽略大小写删除重复记录

python - 将数据框写入带有宽列的Excel

python pandas - 基于列名构建子集

python - 在python中用英文和印地文字符解析csv文件

python - 使用python登录NAS

java - 使用 DAO 读取 CSV 文件?