GVKun编程网logo

将以逗号分隔的字符串的pandas DataFrame列转换为一键编码(python中以逗号为分割符进行换行)

14

本文的目的是介绍将以逗号分隔的字符串的pandasDataFrame列转换为一键编码的详细情况,特别关注python中以逗号为分割符进行换行的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,

本文的目的是介绍将以逗号分隔的字符串的pandas DataFrame列转换为一键编码的详细情况,特别关注python中以逗号为分割符进行换行的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解将以逗号分隔的字符串的pandas DataFrame列转换为一键编码的机会,同时也不会遗漏关于MySql 查询以逗号分隔的字符串的方法(正则)、MYSQL 查询某字段中以逗号分隔的字符串的方法、MYSQL查询某字段中以逗号分隔的字符串的方法、Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe的知识。

本文目录一览:

将以逗号分隔的字符串的pandas DataFrame列转换为一键编码(python中以逗号为分割符进行换行)

将以逗号分隔的字符串的pandas DataFrame列转换为一键编码(python中以逗号为分割符进行换行)

我有一个由一栏组成的大型数据框(“数据”)。列中的每一行由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码。

例如,

data = {"mesh": ["A, B, C", "C,B", ""]}

由此,我想得到一个包含以下内容的数据框:

index      A       B.     C0          1       1      11          0       1      12          0       0      0

我怎样才能做到这一点?

答案1

小编典典

请注意,您不是在处理OHE。

str.split+ stack+ get_dummies+sum

df = pd.DataFrame(data)df      mesh0  A, B, C1      C,B2(df.mesh.str.split(''\s*,\s*'', expand=True)   .stack()   .str.get_dummies()   .sum(level=0))df   A  B  C0  1  1  11  0  1  12  0  0  0

apply + value_counts

(df.mesh.str.split(r''\s*,\s*'', expand=True)   .apply(pd.Series.value_counts, 1)   .iloc[:, 1:]   .fillna(0, downcast=''infer''))   A  B  C0  1  1  11  0  1  12  0  0  0

pd.crosstab

x = df.mesh.str.split(''\s*,\s*'', expand=True).stack()pd.crosstab(x.index.get_level_values(0), x.values).iloc[:, 1:]dfcol_0  A  B  Crow_0         0      1  1  11      0  1  12      0  0  0

MySql 查询以逗号分隔的字符串的方法(正则)

MySql 查询以逗号分隔的字符串的方法(正则)

现数据库表中某个字段保存的值为“01,07,08”,需要sql去查询下表中到相应的名称:
1、使用find_in_set()...
查询字段中包含01,07,08的记录:

SELECT * FROM test WHERE find_in_set(''01'',itemname) OR find_in_set(''07'',itemname);

这SQL,肿么给它拆分开呢,难道再循环一下....

2、正则表达式,完美解决:

SELECT * FROM test WHERE itemname REGEXP ''(01|07|08)'';
SELECT * FROM test WHERE CONCAT('','',itemname,'','') REGEXP ''[^0-9]+(3|9)[^0-9]+'';

这个查询出来是多条数据的,然后再用到了group_concat()函数,OK

项目中就这么写的:

SELECT  
    group_concat(itemname)  
FROM  
    code_library  
WHERE  
    codeno = ''Com_insurance''  
AND itemno REGEXP (  
    SELECT  
        REPLACE (Species, '','', ''|'')  
    FROM  
        capital_info  
    WHERE  
        customerid = ''2016011800000001''  
)

参考:

MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
http://my.oschina.net/wallenheng/blog/402246

MySql 查询以逗号分隔的字符串的方法(正则)

http://blog.csdn.net/hechurui/article/details/50550468

MySQL模糊查询:LIKE模式和REGEXP模式

http://www.linuxidc.com/Linux/2015-03/114580.htm

MYSQL 查询某字段中以逗号分隔的字符串的方法

MYSQL 查询某字段中以逗号分隔的字符串的方法

https://www.cnblogs.com/gmq-sh/p/6848929.html
 
首先我们建立一张带有逗号分隔的字符串。

CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);

然后插入带有逗号分隔的测试数据
INSERT INTO test (pname,pnum) VALUES ('' 产品 1'',''1,2,4'');
INSERT INTO test (pname,pnum) VALUES ('' 产品 2'',''2,4,7'');
INSERT INTO test (pname,pnum) VALUES ('' 产品 3'',''3,4'');
INSERT INTO test (pname,pnum) VALUES ('' 产品 4'',''1,7,8,9'');

INSERT INTO test (pname,pnum) VALUES ('' 产品 5'',''33,4'');

 

查找 pnum 字段中包含 3 或者 9 的记录
MySQL> SELECT * FROM test WHERE find_in_set(''3'',pnum) OR find_in_set(''9'',pnum);
+----+-------+---------+
| id | pname | pnum    |
+----+-------+---------+
|  3 | 产品 3 | 3,4     |
|  4 | 产品 4 | 1,7,8,9 |
+----+-------+---------+
2 rows in set (0.03 sec)

 

使用正则
mysql> SELECT * FROM test WHERE pnum REGEXP ''(3|9)'';
+----+-------+---------+
| id | pname | pnum    |
+----+-------+---------+
|  3 | 产品 3 | 3,4     |
|  4 | 产品 4 | 1,7,8,9 |
|  5 | 产品 5 | 33,4    |
+----+-------+---------+
3 rows in set (0.02 sec)
这样会产生多条记录,比如 33 也被查找出来了。

 

换一种方式

 

 
  • mysql> SELECT * FROM test WHERE CONCAT('','',pnum,'','') REGEXP ''[^0-9]+[3|9][^0-9]+'';  

  • +----+-------+---------+
    | id | pname | pnum    |
    +----+-------+---------+
    |  3 | 产品 3 | 3,4     |
    |  4 | 产品 4 | 1,7,8,9 |
    +----+-------+---------+
    2 rows in set (0.01 sec)

     

     

    3、select * from oa_student_archives where CONCAT('','',pe_projects,'','') like ''%,11,%'';

    这种方式也可以。

     

    注意:

    标红的 mysql> SELECT * FROM test WHERE CONCAT('','',pnum,'','') REGEXP ''[^0-9]+[3|9][^0-9]+''; 

    这种,当时小于 10 的数据搜索是可以的,但是如果是大于 10 的,则不能用,原因我还不太清楚,有大神可以解释下吗?

     

    总结如下:

    1、select * from oa_student_archives where CONCAT('','',pe_projects,'','') like ''%,11,%'';

    2、select * from oa_student_archives where find_in_set(''12'', pe_projects);

     

    以上的两个都可以用。

    本文同步分享在 博客 “lxw1844912514”(CSDN)。
    如有侵权,请联系 support@oschina.cn 删除。
    本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

    MYSQL查询某字段中以逗号分隔的字符串的方法

    MYSQL查询某字段中以逗号分隔的字符串的方法

    来源地址:https://www.cnblogs.com/gmq-sh/p/6848929.html

    衷心感谢作者的无私分享!

    首先我们建立一张带有逗号分隔的字符串。

    CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);

    然后插入带有逗号分隔的测试数据
    INSERT INTO test(pname,pnum) VALUES(''产品1'',''1,2,4'');
    INSERT INTO test(pname,pnum) VALUES(''产品2'',''2,4,7'');
    INSERT INTO test(pname,pnum) VALUES(''产品3'',''3,4'');
    INSERT INTO test(pname,pnum) VALUES(''产品4'',''1,7,8,9'');

    INSERT INTO test(pname,pnum) VALUES(''产品5'',''33,4'');

     

    查找pnum字段中包含3或者9的记录
    MySQL> SELECT * FROM test WHERE find_in_set(''3'',pnum) OR find_in_set(''9'',pnum);
    +----+-------+---------+
    | id | pname | pnum    |
    +----+-------+---------+
    |  3 | 产品3 | 3,4     |
    |  4 | 产品4 | 1,7,8,9 |
    +----+-------+---------+
    2 rows in set (0.03 sec)

     

    使用正则
    mysql> SELECT * FROM test WHERE pnum REGEXP ''(3|9)'';
    +----+-------+---------+
    | id | pname | pnum    |
    +----+-------+---------+
    |  3 | 产品3 | 3,4     |
    |  4 | 产品4 | 1,7,8,9 |
    |  5 | 产品5 | 33,4    |
    +----+-------+---------+
    3 rows in set (0.02 sec)
    这样会产生多条记录,比如33也被查找出来了。

     

    换一种方式

     

     
    1. mysql> SELECT * FROM test WHERE CONCAT('','',pnum,'','') REGEXP ''[^0-9]+[3|9][^0-9]+'';  


    +----+-------+---------+
    | id | pname | pnum    |
    +----+-------+---------+
    |  3 | 产品3 | 3,4     |
    |  4 | 产品4 | 1,7,8,9 |
    +----+-------+---------+
    2 rows in set (0.01 sec)

     

     

    3、select * from oa_student_archives where CONCAT('','',pe_projects,'','') like ''%,11,%'';

    这种方式也可以。

     

    注意:

    标红的mysql> SELECT * FROM test WHERE CONCAT('','',pnum,'','') REGEXP ''[^0-9]+[3|9][^0-9]+''; 

    这种,当时小于10的数据搜索是可以的,但是如果是大于10的,则不能用,原因我还不太清楚,有大神可以解释下吗?

     

    总结如下:

    1、select * from oa_student_archives where CONCAT('','',pe_projects,'','') like ''%,11,%'';

    2、select * from oa_student_archives where find_in_set(''12'', pe_projects);

     

    以上的两个都可以用。

    Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

    Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

    我能够使用下面的方法获得所需的输出

    df1.merge(df2,left_on = df2.prod_ref.str.extract(''(\d+)'',expand = False),right_on = df1.prod_id.str.extract(''(\d+)'',how = ''left'')
    

    关于将以逗号分隔的字符串的pandas DataFrame列转换为一键编码python中以逗号为分割符进行换行的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于MySql 查询以逗号分隔的字符串的方法(正则)、MYSQL 查询某字段中以逗号分隔的字符串的方法、MYSQL查询某字段中以逗号分隔的字符串的方法、Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe等相关内容,可以在本站寻找。

    本文标签: