本文的目的是介绍将以逗号分隔的字符串的pandasDataFrame列转换为一键编码的详细情况,特别关注python中以逗号为分割符进行换行的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,
本文的目的是介绍将以逗号分隔的字符串的pandas DataFrame列转换为一键编码的详细情况,特别关注python中以逗号为分割符进行换行的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解将以逗号分隔的字符串的pandas DataFrame列转换为一键编码的机会,同时也不会遗漏关于MySql 查询以逗号分隔的字符串的方法(正则)、MYSQL 查询某字段中以逗号分隔的字符串的方法、MYSQL查询某字段中以逗号分隔的字符串的方法、Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe的知识。
本文目录一览:- 将以逗号分隔的字符串的pandas DataFrame列转换为一键编码(python中以逗号为分割符进行换行)
- MySql 查询以逗号分隔的字符串的方法(正则)
- MYSQL 查询某字段中以逗号分隔的字符串的方法
- MYSQL查询某字段中以逗号分隔的字符串的方法
- Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe
将以逗号分隔的字符串的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 查询以逗号分隔的字符串的方法(正则)
现数据库表中某个字段保存的值为“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 查询某字段中以逗号分隔的字符串的方法
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 的记录
+----+-------+---------+
| 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 也被查找出来了。
换一种方式
+----+-------+---------+
| 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查询某字段中以逗号分隔的字符串的方法
来源地址: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);
以上的两个都可以用。
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等相关内容,可以在本站寻找。
本文标签: