将dataframe列值转换为数字数字

时间:2017-08-27 02:37:47

标签: python-3.x pandas numpy dataframe

我的数据框列中有以下数据。如何通过数字转换每个域名?我尝试在for循环中使用replace。但是,由于我有超过1200个unqie域名。我不想这似乎不是一个想法的方法

for i, v in np.ndenumerate(np.unique(df['domain'])):
    df['domain'] = df['domain'].replace(to_replace=[v], value=i[0]+1, inplace=True)

但它不起作用

data frame:
    type  domain
0    1     yahoo.com
1    1     google.com
2    0     google.com
3    0     aa.com
4    0     google.com
5    0     aa.com
6    1     abc.com
7    1     msn.com
8    1     abc.com
9    1     abc.com
....

我想转换为

    type  domain
0    1     1
1    1     2
2    0     2
3    0     3
4    0     2
5    0     3
6    1     4
7    1     5
8    1     4
9    1     4
....

2 个答案:

答案 0 :(得分:5)

让我们使用pd.factorize

df.assign(domain=pd.factorize(df.domain)[0]+1)

输出:

   type  domain
0     1       1
1     1       2
2     0       2
3     0       3
4     0       2
5     0       3
6     1       4
7     1       5
8     1       4
9     1       4

答案 1 :(得分:1)

如果确实对数字编号分配有影响,可以试试这个

   public class Dad1 extends AppCompatActivity {

private Handler handler;

private Runnable myRunnable;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initRunnable();
    handler.postDelayed(myRunnable,3000);
}

private void initRunnable() {
    myRunnable = new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(getApplicationContext(), Dad2.class);
            startActivity(i);
            finish();
        }
    };
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    if(handler!=null){
        handler.removeCallbacks(myRunnable);
    }
}

如果这很重要,您可以尝试

import pandas as pd 

df.domain.astype('category').cat.codes

Out[154]: 
0    4
1    2
2    2
3    0
4    2
5    0
6    1
7    3
8    1
9    1
dtype: int8