【问题标题】:Expanding a frequency dataset for a single variable扩展单个变量的频率数据集
【发布时间】:2015-05-03 18:28:00
【问题描述】:

我有两列数据:一列是温度值,另一列是观察到每个温度的频率。我一直在尝试用 python 编写代码来获取这个 2 列频率数据并创建一个扩展的温度数据数组。我本质上想反转“计数”值的过程,并将所有原始数据值暴露在一个数组中。

我目前读取数据的方式如下:

f = np.genfromtxt('playground_sum.txt', usecols=(0,1))

freq = f[:,1]
temp = f[:,0]
freq = freq.astype(int)

new = []
for line in f:
    new = np.repeat(temp,freq)
print new

这行得通!欢迎任何其他方法。

【问题讨论】:

  • 您能展示一下您尝试过什么吗?另外,如果我了解您想要实现的目标(根据 FREQ 的值显示 TEMP),如果 10 的 FREQ 为 0,为什么要显示 [10]
  • @gk3rch 你的文本文件格式好像完全改了,请问array() 是从哪里来的?
  • 我对所做的更改表示歉意,我只是想展示一个示例。我在 ipython 笔记本中编码。对我来说重要的是概念,而不是数字、输入/输出、格式。
  • 你有.txt格式的数据还是你已经有嵌套列表?
  • 我有.txt格式的数据

标签: python arrays count histogram frequency


【解决方案1】:

类似于@Totem 解决方案,除了我认为您应该将频率转换为整数。

array = []
with open('test.csv') as f:
    for line in f:
        temp, freq = line.split(',')
        try:
            freq = int(freq)
        except Exception as e:
            continue

        array.extend([temp] * freq)

print array

【讨论】:

  • 你的数据是什么样的?那应该是temp, freq = line.split(',') 的一部分,原因是它试图拆分行但只有一个值作为回报,所以另一个是unpack
  • 我认为问题是因为我使用的是 numpy 数组?
  • 您应该更新您的问题并在此处附加您当前的代码
【解决方案2】:

试试这个:

array = []
with open('myfile.txt') as f:
    for line in f:
        line = line.strip()[1: -1] # gives ex: '10, 0'
        try:
            temp, freq = [int(i) for i in line.split(',')] # a list comprehension
        except ValueError:
            continue
        array.extend([temp] * freq)

这假定文件中的每一行如下所示:[10, 0]

此代码输出如下所示的列表:[10, 20, 20, 30, 30, 30]

【讨论】:

  • 您不应该将freq 转换为 int 吗?
猜你喜欢
  • 1970-01-01
  • 2012-08-25
  • 2019-02-08
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2016-11-18
相关资源
最近更新 更多