将NLTK的条件频率分布转换为Pandas数据框
我正在尝试使用nltk生成的ConditionalFreqDist表格,但找不到任何关于如何将这个表格写入csv文件或导出到其他格式的文档。我希望能把它放到pandas的数据框中,这样写入csv就很简单了。我找到的唯一一个讨论建议将CFD对象进行序列化,但这并没有真正解决我的问题。
我写了一个函数,用来把nltk的ConditionalFreqDist对象转换成pd.DataFrame:
def nltk_cfd_to_pd_dataframe(cfd):
""" Converts an nltk.ConditionalFreqDist object into a pandas DataFrame object. """
df = pd.DataFrame()
for cond in cfd.conditions():
col = pd.DataFrame(pd.Series(dict(cfd[cond])))
col.columns = [cond]
df = df.join(col, how = 'outer')
df = df.fillna(0)
return df
不过,如果我要这样做,或许直接写一个新的ConditionalFreqDist函数,让它一开始就生成pd.DataFrame会更合理。但在我重新发明轮子之前,我想看看是否有我遗漏的技巧——无论是在NLTK还是其他地方,让ConditionalFreqDist对象能够与其他格式对接,最重要的是能导出到csv文件。
谢谢。
4 个回答
你可以把 FreqDist 当作一个字典来使用,然后可以通过 from_dict 方法从这个字典创建一个数据框。
fdist = nltk.FreqDist( ... )
df_fdist = pd.DataFrame.from_dict(fdist, orient='index')
df_fdist.columns = ['Frequency']
df_fdist.index.name = 'Term'
print(df_fdist)
df_fdist.to_csv(...)
输出结果:
Frequency
Term
is 70464
a 26429
the 15079
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,如果你想让程序在某个数字大于10的时候,显示“这个数字很大”,你就需要用到条件判断。
条件判断就像是在问一个问题:如果这个条件成立,那么就做某件事情。就像你在生活中会问:“如果今天下雨,我要不要带伞?”如果答案是“是”,那么你就会带伞;如果答案是“否”,你就不带。
在代码里,这种判断通常用“if”语句来实现。你可以把它想象成一个开关,只有在条件满足的时候,开关才会打开,程序才会执行你想要的操作。
希望这个解释能帮助你更好地理解条件判断的概念!
pd.DataFrame(freq_dist.items(), columns=['word', 'frequency'])
好的,我写了一个条件频率分布的函数,它接收一个元组的列表,类似于 nltk.ConditionalFreqDist
函数,但返回的是一个 pandas 数据框对象。这个方法比把 cfd 对象转换成数据框要快。
def cond_freq_dist(data):
""" Takes a list of tuples and returns a conditional frequency distribution as a pandas dataframe. """
cfd = {}
for cond, freq in data:
try:
cfd[cond][freq] += 1
except KeyError:
try:
cfd[cond][freq] = 1
except KeyError:
cfd[cond] = {freq: 1}
return pd.DataFrame(cfd).fillna(0)