【发布时间】:2018-03-16 15:44:39
【问题描述】:
如果 pandas 数据框行包含某个子字符串,如何扫描?
例如,我有一个包含 11 列的数据框 所有列都包含名称
ID name1 name2 name3 ... name10
-------------------------------------------------------
AA AA_balls AA_cakee1 AA_lavender ... AA_purple
AD AD_cakee AD_cats AD_webss ... AD_ballss
CS CS_cakee CS_cats CS_webss ... CS_purble
.
.
.
我想在数据框中获取包含“球”的行并获取 ID
所以结果将是 ID 'AA' 和 ID 'AD',因为 AA_balls 和 AD_ballss 在行中。
我在 google 上搜索过,但似乎没有针对这些的具体结果。 人们通常会询问有关在特定列而不是所有列(单行)中搜索子字符串的问题
df[df["col_name"].str.contains("ball")]
我想到的方法如下,时间不多的可以跳过:
(1) 遍历列
for col_name in col_names:
df.append(df[df[col_name].str.contains('ball')])
然后删除具有相同 ID 值的重复行 但是这种方法会很慢
(2) 通过将 name2-name10 列附加到一列中,将数据框制作为 2 列数据框,并使用 df[df["concat_col"].str.contains("ball")]["ID] 获取ID 和删除重复项
ID concat_col
AA AA_balls
AA AA_cakeee
AA AA_lavender
AA AA_purple
.
.
.
CS CS_purble
(3) 使用像 (2) 这样的数据框来制作字典 在哪里
dict[df["concat_col"].value] = df["ID"]
然后得到
[value for key, value in programs.items() if 'ball' in key()]
但在这种方法中,我需要遍历字典并变慢
如果有一种方法可以让我在没有这些过程的情况下更快地应用, 我宁愿这样做。 如果有人知道这件事, 如果您能告诉我,将不胜感激:) 谢谢!
【问题讨论】:
-
DataFrame 的大小是多少?
-
不大,df.shape 在 (4000, 13) 附近,但我在编程过程中做了很多预处理,想寻找更省时的方法
-
好的,给我一些时间安排
-
嗯,时间也取决于有多少场比赛显然 - 你怎么看?
50%行数?还是别的什么? -
感谢您在下面的回答。让我试试并回复你。匹配项很少,少于 15 行。