使用合并

时间:2017-12-23 19:08:11

标签: 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  

我做错了什么?

1 个答案:

答案 0 :(得分:1)

好的,这就是你想要的吗?

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