【问题标题】:Reorder Rows into Columns in Pandas (Python 3, Pandas)在 Pandas 中将行重新排序为列(Python 3,Pandas)
【发布时间】:2014-09-10 19:04:48
【问题描述】:

现在,我的代码从文件 (BigramCounter.txt) 中获取抓取的网络数据,然后在该文件中找到所有的二元组,使数据看起来像这样:

Counter({('the', 'first'): 45, ('on', 'purchases'): 42, ('cash', 'back'): 39})

在此之后,我尝试将其输入到 pandas DataFrame 中,它将这个 df 吐出:

     the     on         cash
     first   purchases  back

 0    45        42       39

这与我需要的非常接近,但并不完全。首先,DF 没有读取我对列命名的尝试。此外,我希望格式更像这样的东西,其中它的两列和单词不会在单元格之间拆分:

 Words         Frequency
the first        45
on purchases     42
cash back        39

作为参考,这是我的代码。我想我可能需要在某处重新排序轴,但我不确定如何?有什么想法吗?

import re
from collections import Counter
main_c = Counter()
words = re.findall('\w+', open('BigramCounter.txt', encoding='utf-8').read())
bigrams = Counter(zip(words,words[1:])) 
main_c.update(bigrams) #at this point it looks like Counter({('the', 'first'): 45, etc...})
comm = [[k,v] for k,v in main_c]
frame = pd.DataFrame(comm)
frame.columns = ['Word', 'Frequency']
frame2 = frame.unstack()
frame2.to_csv('text.csv') 

【问题讨论】:

  • 你真的可以给 wither BigramCounter.txt 或一个中间数据帧吗,atm 目前还不清楚你在哪里/我们如何到达那里。
  • 嗨,安迪,我现在在哪里是我的问题中的第二个格式。我有三个 ROWS,其中包含我的所有数据!
  • 问题是,至少对我来说,它看起来不像 DataFrame,我不确定如何创建它(你有同样的东西)。也许您可以粘贴.to_dict() 的输出?
  • 好的——我更新了我的问题。是不是更清楚了?
  • 我在这里仍然得到不同的框架。你能不能把一开始的东西去掉 findall 和东西,只用 bigrams = Counter({('the', ...}) 和构造 frame 和 frame2。(你也在使用旧版本的 pandas,更旧那个 0.14.1?这可以部分解释差异)

标签: python-3.x pandas


【解决方案1】:

我想我明白你的目标了,而且有很多方法可以到达那里。你真的很亲近。我的第一个倾向是使用系列,特别是因为您(大概)在写入 csv 时只是摆脱了 df 索引,但这并没有太大的区别。

frequencies = [[" ".join(k), v] for k,v in main_c.items()]
pd.DataFrame(frequencies, columns=['Word', 'Frequency'])

           Word  Frequency
0     the first         45
1     cash back         39
2  on purchases         42

如果我怀疑您希望 word 成为索引,请添加 frame.set_index('Word')

         Word  Frequency
    the first         45
    cash back         39
 on purchases         42

【讨论】:

  • 伙计,这真是救命稻草。如果可以的话,我会投票一百万次——你不知道我花了多少时间试图让它发挥作用。你介意更详细地解释一下这对我是如何工作的(如果你有时间?)谢谢!
  • @user3682157 我很乐意解释。有什么特别让你有问题的吗?
  • 这一行尤其是: = [[" ".join(k), v] for k,v in main_c.items()] 为什么这行在我原来的行没有的地方起作用?另外,为什么这不起作用 [[k,v,c] for k,v,c in main_c]
  • " ".join(k) 将 Pandas 想要将其视为多索引的一部分(在您的原始帖子中,导致奇怪的两级列)或作为文字元组的元组转换为字符串.您也可以完成[[k,v,c] for (k,v),c in main_c.items()] - 您需要调用项目或迭代只会返回键而不是键和值的元组。同样的属性是为什么您原来的 [[k,v] for k,v in main_c] 只返回单词而不是频率。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 2018-07-24
  • 2013-01-12
  • 2019-05-10
  • 2018-04-11
  • 2012-09-02
相关资源
最近更新 更多