根据列中存储的不同标签对数据框的字数进行分组
Group the word count of a data frame according to the diferent labels stored in a column
我想知道数据帧的所有单元格上两个 类 最有代表性的词
Q1 Q2 Q3 Label
Cada vez que gobiernan los socialistas provocan paro y crisis. Zapatero hace su 39 visita a la dictadura venezolana ¿Qué motiva este viaje? Según Sánchez en Cataluña la ley no basta, y según Iceta hay que amnistiar a los que dieron un golpe al Estado. ¿Cuánta dignidad cuesta el poder? PP
Los #10acuerdosdepais responden a los#ODS #Agenda2030 Hacia un nuevo contrato social global : capital,trabajo,planeta y Estado. Premio muy merecido,@duarteoceans. Es uno de los biólogos marinos más prestigiosos,que nos ayudan a entender la interacción océano-cambio climático. PSOE
...
我想:
{
'PP':{'Zapatero':2, 'truco': 3, ...},
'PSOE':{'Gobierno':4,'truco':2}
}
我想做 :
wordfreq = []
for i, row in df.iloc[:,25:].iterrows():
for column in df.iloc[:,25:].columns:
wordlist = row[column].split() # I divided each cell in a column of words
for w in wordlist:
wordfreq.append(wordlist.count(w)) # I add up the words in one
# But I don't know how to add them to the dictionary of specific words for each labe
我的问题是我不知道如何将它们添加到每个标签的特定 'labelwordfreq' 个单词的词典中。
终端回答我:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-54-cc03daf63866> in <module>
2 for i, row in df.iloc[:,25:].iterrows():
3 for column in df.iloc[:,25:].columns:
----> 4 wordlist = row[column].split() # Dividí cada celda de una columna de palabras
5 for w in wordlist:
6 wordfreq.append(wordlist.count(w)) # Sumo las palabras en uno
AttributeError: 'float' object has no attribute 'split'
我这里可能有一个nan
。
我想我的尺寸可能有问题,因为它对所有世界都很重要(我可以只拥有前 10 名)
尝试更新 Grzegorz Skibinski 的回答
我尝试了以下代码:
cols=df.iloc[:,25:-1].columns.values
df["Q"]=x[0]
for i in cols[1:]:
df["Q"]=df["Q"].str.cat(df[i], sep=" ")
df["Q"]=df["Q"].str.lower()
但是得到了:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-87-67083b1bcc84> in <module>
6 df["Q"]=df["Q"].str.lower()
7
----> 8 df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
3589 else:
3590 values = self.astype(object).values
-> 3591 mapped = lib.map_infer(values, f, convert=convert_dtype)
3592
3593 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
C:\ProgramData\Anaconda3\lib\collections\__init__.py in __init__(*args, **kwds)
564 raise TypeError('expected at most 1 arguments, got %d' % len(args))
565 super(Counter, self).__init__()
--> 566 self.update(*args, **kwds)
567
568 def __missing__(self, key):
C:\ProgramData\Anaconda3\lib\collections\__init__.py in update(*args, **kwds)
651 super(Counter, self).update(iterable) # fast path when counter is empty
652 else:
--> 653 _count_elements(self, iterable)
654 if kwds:
655 self.update(kwds)
TypeError: 'float' object is not iterable
df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
我注意到第 72 行是 NaN
,所以我删除了它:
df = df.drop(72)
所以现在 df['Q']
是:
0 {'s02q02': 1, 'self': 1, 'employed': 3, '': 11...
1 {'s02q02': 1, 'unemployed': 2, '': 270, 'perso...
如何根据df['Label']
收集它们?
你可以这样做:
from collections import Counter
df["Q"]=df["Q1"].str.cat(df["Q2"], sep=" ").str.cat(df["Q3"], sep=" ").str.lower()
df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
这基本上会执行以下操作:
(1) 连接所有 Q
列(如果我理解正确的话 - 这就是您想要的,即不管 Q
出现在什么地方,都计算单词数)。另外 - 我从最后一列中使用了小写字母(我假设你想要计数不区分大小写)
(2) 将连接值拆分为每个字符,不是字母
(3) 应用Counter
统计(2)
拆分后的列表中的单词数
我想知道数据帧的所有单元格上两个 类 最有代表性的词
Q1 Q2 Q3 Label
Cada vez que gobiernan los socialistas provocan paro y crisis. Zapatero hace su 39 visita a la dictadura venezolana ¿Qué motiva este viaje? Según Sánchez en Cataluña la ley no basta, y según Iceta hay que amnistiar a los que dieron un golpe al Estado. ¿Cuánta dignidad cuesta el poder? PP
Los #10acuerdosdepais responden a los#ODS #Agenda2030 Hacia un nuevo contrato social global : capital,trabajo,planeta y Estado. Premio muy merecido,@duarteoceans. Es uno de los biólogos marinos más prestigiosos,que nos ayudan a entender la interacción océano-cambio climático. PSOE
...
我想:
{
'PP':{'Zapatero':2, 'truco': 3, ...},
'PSOE':{'Gobierno':4,'truco':2}
}
我想做 :
wordfreq = []
for i, row in df.iloc[:,25:].iterrows():
for column in df.iloc[:,25:].columns:
wordlist = row[column].split() # I divided each cell in a column of words
for w in wordlist:
wordfreq.append(wordlist.count(w)) # I add up the words in one
# But I don't know how to add them to the dictionary of specific words for each labe
我的问题是我不知道如何将它们添加到每个标签的特定 'labelwordfreq' 个单词的词典中。
终端回答我:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-54-cc03daf63866> in <module>
2 for i, row in df.iloc[:,25:].iterrows():
3 for column in df.iloc[:,25:].columns:
----> 4 wordlist = row[column].split() # Dividí cada celda de una columna de palabras
5 for w in wordlist:
6 wordfreq.append(wordlist.count(w)) # Sumo las palabras en uno
AttributeError: 'float' object has no attribute 'split'
我这里可能有一个nan
。
我想我的尺寸可能有问题,因为它对所有世界都很重要(我可以只拥有前 10 名)
尝试更新 Grzegorz Skibinski 的回答
我尝试了以下代码:
cols=df.iloc[:,25:-1].columns.values
df["Q"]=x[0]
for i in cols[1:]:
df["Q"]=df["Q"].str.cat(df[i], sep=" ")
df["Q"]=df["Q"].str.lower()
但是得到了:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-87-67083b1bcc84> in <module>
6 df["Q"]=df["Q"].str.lower()
7
----> 8 df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
3589 else:
3590 values = self.astype(object).values
-> 3591 mapped = lib.map_infer(values, f, convert=convert_dtype)
3592
3593 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
C:\ProgramData\Anaconda3\lib\collections\__init__.py in __init__(*args, **kwds)
564 raise TypeError('expected at most 1 arguments, got %d' % len(args))
565 super(Counter, self).__init__()
--> 566 self.update(*args, **kwds)
567
568 def __missing__(self, key):
C:\ProgramData\Anaconda3\lib\collections\__init__.py in update(*args, **kwds)
651 super(Counter, self).update(iterable) # fast path when counter is empty
652 else:
--> 653 _count_elements(self, iterable)
654 if kwds:
655 self.update(kwds)
TypeError: 'float' object is not iterable
df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
我注意到第 72 行是 NaN
,所以我删除了它:
df = df.drop(72)
所以现在 df['Q']
是:
0 {'s02q02': 1, 'self': 1, 'employed': 3, '': 11...
1 {'s02q02': 1, 'unemployed': 2, '': 270, 'perso...
如何根据df['Label']
收集它们?
你可以这样做:
from collections import Counter
df["Q"]=df["Q1"].str.cat(df["Q2"], sep=" ").str.cat(df["Q3"], sep=" ").str.lower()
df["Q"]=df["Q"].str.split("[^\w]").apply(Counter)
这基本上会执行以下操作:
(1) 连接所有 Q
列(如果我理解正确的话 - 这就是您想要的,即不管 Q
出现在什么地方,都计算单词数)。另外 - 我从最后一列中使用了小写字母(我假设你想要计数不区分大小写)
(2) 将连接值拆分为每个字符,不是字母
(3) 应用Counter
统计(2)