当前位置:  开发笔记 > 编程语言 > 正文

pandas - 在DataFrame中搜索字符

如何解决《pandas-在DataFrame中搜索字符》经验,为你挑选了1个好方法。

我有一个pandas DataFrame(df),我需要搜索分号.我第一次尝试

semicolon_check = df.to_string().__contains__(';'),

但它非常慢,如果是大型DataFrame,我会遇到内存错误.然后我尝试循环遍历列.str,但不是所有列都是字符串,所以每当我到达数字列时,我收到一个错误

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

所以我最终得到了这段代码

for col in df.columns: if df[col].dtype == 'O': if df[col].str.contains(r';').any(): print 'found in ' + col

是否有更简单的方法来实现目标?上面的内容虽然按预期工作,但对于像价值搜索这样的基本任务来说似乎有点过分了.



1> EdChum - Rei..:

您可以使用过滤只是字符串列select_dtypes,然后调用apply并传递一个lambdastr.containsany:

In [33]:
# create a test df
df = pd.DataFrame({'int':np.arange(5), 'str':['a','a;a',';','b','c'], 'flt':np.random.randn(5), 'other str':list('abcde')})
df

Out[33]:
        flt  int other str  str
0  1.020561    0         a    a
1  0.022842    1         b  a;a
2 -1.207961    2         c    ;
3  1.092960    3         d    b
4 -1.560300    4         e    c

In [35]:
# filter on dtype
test = df.select_dtypes([np.object]).apply(lambda x: x.str.contains(';').any())
test

Out[35]:
other str    False
str           True
dtype: bool

我们可以使用过滤后的df中的columns数组和掩码来过滤cols:

In [36]:
# we can use the above to mask the columns
str_cols = df.select_dtypes([np.object]).columns
str_cols[test]

Out[36]:
Index(['str'], dtype='object')

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有