【问题标题】:Writing data to a .csv file: only the value from the last iteration of a function (Python, pandas)将数据写入 .csv 文件:仅来自函数最后一次迭代的值(Python、pandas)
【发布时间】:2017-06-30 10:02:01
【问题描述】:

我正在编写一个读取 .fits 文件并区分明亮和黑暗图像的代码。为此,我读入图像,获取图像像素的子集,并创建一个函数来确定子集中的所有像素值是否都高于某个阈值。最后我想创建一个 .csv 文件来存储结果。

我的函数是这样写的:

    def function(subset): 
        if np.all(subset > x):
            return True
        else:
            return False

而且这个函数似乎可以工作,对于明亮的图像返回“True”,对于黑暗的图像返回“False”。

但是,下一部分没有。创建.csv文件的代码如下:

csv_file = open('new_file.csv', 'wb')
writer = csv.writer(csv_file)
for f in filenames:
    writer.writerow([f, function(subset)])

csv_file.close()

当我将 .csv 文件作为数据框读取时,我发现函数返回没有被结转,所有文件都返回一个“真”值,无论是错误的还是正确的。这是我的数据框的显示方式:

    "filename"   "function result"
0   file1.fits    True
1   file2.fits    True
2   file3.fits    True

我知道在执行函数“function(subset)”时​​,如果 file2.fits 是“暗”图像,它将返回值“False”。

有什么建议吗?非常感谢您的帮助!

【问题讨论】:

  • pandas 中如何使用函数? df['result'] = df['filename'].apply(function) ?如何定义子集?
  • 我意识到我在任何时候都没有调用过这个函数。但是,当我包含您的代码 df['result'] = df['filename'].apply(function) 时,我收到错误消息:TypeError: 'bool' object is not callable,我认为这是因为我试图调用可能返回 True/False 的结果?
  • 没错。需要返回 True False。

标签: python-2.7 function csv pandas


【解决方案1】:

您需要从Series.apply 调用的函数中返回TrueFalse

np.random.seed(1)

def function(x):
    #print (x)
    #sample generator 
    y = np.random.choice([True, False], 1)[0]
    if y:
        return True
    else:
        return False

df['result'] = df['filename'].apply(function)
print (df)
     filename  result
0  file1.fits   False
1  file2.fits   False
2  file3.fits    True

【讨论】:

  • 您好,这段代码是否会为 x 的每个值随机分配一个真/假值?如果是这样,有没有办法编辑它,以便将 True 或 False 分配给 x 的特定值?
  • 你能解释更多的逻辑吗?
  • 您共享的代码(其中function(x) 定义为y = np.random.choice([True, False], 1)[0])为我的数据框中的每一行返回一个值“True”或“False”。该行接收“真”还是“假”是随机确定的,对吗?也就是说,除了随机的真/假生成器之外,没有分配“真”或“假”的标准。我想做的是根据与我的数据框每一行的内在价值相关的标准分配“真”或“假”。
  • 你是对的。我使用随机函数为随机 True 和 False 值创建样本数据。问题是您返回布尔值的真正功能是什么?您对真实数据的标准是什么?
  • 感谢您的帮助。数据帧中的每一行都引用一个 .fits 图像文件,其中包含特定值的像素。我希望返回 True 的图像包含具有更高值的像素:例如,如果图像文件中 80% 的像素的值 > 6000,那么我希望我的函数返回 True;如果 6000,False.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多