Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 统计数据帧中每个特定单词的出现次数_Python_Pandas_Dataframe - Fatal编程技术网

Python 统计数据帧中每个特定单词的出现次数

Python 统计数据帧中每个特定单词的出现次数,python,pandas,dataframe,Python,Pandas,Dataframe,我想计算数据帧中每个特定单词的出现次数。我目前使用的是str.contains: a = df2[df2['col1'].str.contains("sample")].groupby('col2').size() n = a.apply(lambda x: 1).sum() 是否有方法匹配正则表达式并获取出现次数?在我的例子中,我有一个大的数据帧,我想匹配大约100个字符串。要计算匹配的总数,请使用s.str.match(…).str.get(0.count() 如果您的

我想计算数据帧中每个特定单词的出现次数。我目前使用的是
str.contains

a = df2[df2['col1'].str.contains("sample")].groupby('col2').size()
n = a.apply(lambda x: 1).sum()

是否有方法匹配正则表达式并获取出现次数?在我的例子中,我有一个大的数据帧,我想匹配大约100个字符串。

要计算匹配的总数,请使用
s.str.match(…).str.get(0.count()

如果您的正则表达式将匹配多个单独的单词,请使用
s.str.match(…).str.get(0).groupby(lambda x:x).count()

它的工作原理如下:

In [12]: s
Out[12]: 
0    ax
1    ay
2    bx
3    by
4    bz
dtype: object
match
string方法处理正则表达式

In [13]: s.str.match('(b[x-y]+)')
Out[13]: 
0       []
1       []
2    (bx,)
3    (by,)
4       []
dtype: object
…但给出的结果并不十分方便。string方法
get
将匹配项作为字符串,并将空结果转换为NaN

In [14]: s.str.match('(b[x-y]+)').str.get(0)
Out[14]: 
0    NaN
1    NaN
2     bx
3     by
4    NaN
dtype: object
…这不算在内

In [15]: s.str.match('(b[x-y]+)').str.get(0).count()
Out[15]: 2

更新:原始答案统计包含子字符串的行

要计算子字符串的所有出现次数,可以使用:


str.contains
方法接受正则表达式:

Definition: df.words.str.contains(self, pat, case=True, flags=0, na=nan)
Docstring:
Check whether given pattern is contained in each string in the array

Parameters
----------
pat : string
    Character sequence or regular expression
case : boolean, default True
    If True, case sensitive
flags : int, default 0 (no flags)
    re module flags, e.g. re.IGNORECASE
na : default NaN, fill value for missing values.
例如:

In [11]: df = pd.DataFrame(['hello', 'world'], columns=['words'])

In [12]: df
Out[12]:
   words
0  hello
1  world

In [13]: df.words.str.contains(r'[hw]')
Out[13]:
0    True
1    True
Name: words, dtype: bool

In [14]: df.words.str.contains(r'he|wo')
Out[14]:
0    True
1    True
Name: words, dtype: bool
要计算发生次数,只需将此布尔数列求和即可:

In [15]: df.words.str.contains(r'he|wo').sum()
Out[15]: 2

In [16]: df.words.str.contains(r'he').sum()
Out[16]: 1

您可以使用
value\u count
功能

将熊猫作为pd导入
#指向.csv文件的URL
数据https://vincentarelbundock.github.io/Rdatasets/csv/carData/Arrests.csv'
#读取数据
df=pd.read\u csv(数据url,索引列=0)

#熊猫在列中计算不同的值
df['sex'].value_counts()


来源:

这更简洁,可能更快,省去了
get
@Andy Hayden:让我们假设我想要“hello”计数和“word”计数并打印“hello”计数=1”,“word”计数=1”?我能用一行代码完成吗?
word_regexs=[r'he',r'wo']
然后用
pd.Series创建一个系列吗((df.words.str.contains(r).sum()表示word_regexs中的r),word_regexs,name='count')
?这实际上不计算出现次数。这会计算包含单词的行数,因此如果单词可以在单元格中多次出现,则不起作用。子字符串而不是子字符串上存在键入错误。(第一行):谢谢Allan,我的问题是不计算,匹配正则表达式如何..Andy提供了一个简洁的答案,正如您所同意的..:)
In [15]: df.words.str.contains(r'he|wo').sum()
Out[15]: 2

In [16]: df.words.str.contains(r'he').sum()
Out[16]: 1