计算DataFrame中的词频
Calculate word frequency in DataFrame
我正在尝试创建一个数据框,其中第一列 ("Value") 的每一行都有一个多词字符串,所有其他列都有代表 "Value" 中所有字符串的唯一词的标签.我想用每个字符串(一行)的词频填充这个数据框,检查所有唯一词(列)。从某种意义上说,创建一个简单的 TDM
rows = ['you want peace', 'we went home', 'our home is nice', 'we want peace at home']
col_list = [word.lower().split(" ") for word in rows]
set_col = set(list(itertools.chain.from_iterable(col_list)))
columns = set_col
ncols = len(set_col)
testDF = pd.DataFrame(columns = set_col)
testDF.insert(0, "Value", " ")
testDF["Value"] = rows
testDF.fillna(0, inplace=True)
irow = 0
for tweet in testDF["Value"]:
for word in tweet.split(" "):
for col in xrange(1, ncols):
if word == testDF.columns[col]: testDF[irow, col] += 1
irow += 1
testDF.head()
但是,我收到一个错误:
KeyError Traceback (most recent call last)
<ipython-input-64-9a991295ccd9> in <module>()
23 for col in xrange(1, ncols):
24
---> 25 if word == testDF.columns[col]: testDF[irow, col] += 1
26
27 irow += 1
C:\Users\Tony\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
1795 return self._getitem_multilevel(key)
1796 else:
-> 1797 return self._getitem_column(key)
1798
1799 def _getitem_column(self, key):
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3824)()
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3704)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12280)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12231)()
KeyError: (0, 9)
我不确定哪里出了问题,感谢您的帮助
此外,如果有更简洁的方法来执行此操作(除了没有文本挖掘 - 安装问题),那将是很好的学习!
我不是 100% 确定你的完整程序试图做什么,但如果通过以下 -
testDF[irow, col]
你的意思不是索引数据框中的单元格,irow
作为索引,col
作为列,你不能为此使用简单的下标。您应该改为使用 .iloc
之类的。例子-
if word == testDF.columns[col]: testDF.iloc[irow, col] += 1
如果您打算将 irow
设为索引的 0 索引号,请使用 .iloc
,如果 irow
是 DataFrame 的确切索引,您可以使用 .loc
而不是 .iloc
.
我正在尝试创建一个数据框,其中第一列 ("Value") 的每一行都有一个多词字符串,所有其他列都有代表 "Value" 中所有字符串的唯一词的标签.我想用每个字符串(一行)的词频填充这个数据框,检查所有唯一词(列)。从某种意义上说,创建一个简单的 TDM
rows = ['you want peace', 'we went home', 'our home is nice', 'we want peace at home']
col_list = [word.lower().split(" ") for word in rows]
set_col = set(list(itertools.chain.from_iterable(col_list)))
columns = set_col
ncols = len(set_col)
testDF = pd.DataFrame(columns = set_col)
testDF.insert(0, "Value", " ")
testDF["Value"] = rows
testDF.fillna(0, inplace=True)
irow = 0
for tweet in testDF["Value"]:
for word in tweet.split(" "):
for col in xrange(1, ncols):
if word == testDF.columns[col]: testDF[irow, col] += 1
irow += 1
testDF.head()
但是,我收到一个错误:
KeyError Traceback (most recent call last)
<ipython-input-64-9a991295ccd9> in <module>()
23 for col in xrange(1, ncols):
24
---> 25 if word == testDF.columns[col]: testDF[irow, col] += 1
26
27 irow += 1
C:\Users\Tony\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
1795 return self._getitem_multilevel(key)
1796 else:
-> 1797 return self._getitem_column(key)
1798
1799 def _getitem_column(self, key):
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3824)()
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3704)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12280)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12231)()
KeyError: (0, 9)
我不确定哪里出了问题,感谢您的帮助 此外,如果有更简洁的方法来执行此操作(除了没有文本挖掘 - 安装问题),那将是很好的学习!
我不是 100% 确定你的完整程序试图做什么,但如果通过以下 -
testDF[irow, col]
你的意思不是索引数据框中的单元格,irow
作为索引,col
作为列,你不能为此使用简单的下标。您应该改为使用 .iloc
之类的。例子-
if word == testDF.columns[col]: testDF.iloc[irow, col] += 1
如果您打算将 irow
设为索引的 0 索引号,请使用 .iloc
,如果 irow
是 DataFrame 的确切索引,您可以使用 .loc
而不是 .iloc
.