如何对导入的csv数据进行数学运算?

时间:2017-07-05 22:30:12

标签: python arrays list math iteration

我已经阅读了csv文件(' Air.csv')并执行了一些操作来删除标题(不重要)。然后,我使用dB_a.append(row [1])将csv数据的这一列放入一个我以后可以绘制的数组中。

这个数据是dB数据,我想用每个值的简单公式P = 10 ^(dB / 10)将其转换为功率。我是Python的新手,所以我不太了解数组,列表等中的操作是如何工作的。我认为我需要做一些事情来迭代完整的数据集,这是我尝试for循环,但我仍然收到错误。有什么建议吗?

谢谢!

frequency_a=[]
dB_a=[]

a = csv.reader(open('Air.csv'))

for row in itertools.islice(a, 18, 219):
       frequency_a.append(row[0])
       dB_a.append(row[1])
       #print(frequency_a)
       print(dB_a)

for item in dB_a:
    power_a = 10**(dB_a/10)
    print(power_a)

2 个答案:

答案 0 :(得分:1)

在你的for循环中,item是迭代器,所以你需要使用它。所以而不是:

power_a = 10**(dB_a/10)

使用:

power_a = 10**(item/10)

使用该数据创建新列表的更好方法可能是:

power_a = [10**(db/10) for db in dB_a]

编辑:评论中指出的另一个问题是值是字符串。 .csv文件本质上是一个文本文件,因此是字符串的集合,而不是整数。你可以做的是使用int(db)float(db)将它们转换为数值,具体取决于你是否有整数或浮点数。

EDIT2:正如@J所指出的那样。 Meijers,我使用的是乘法而不是求幂 - 答案中已经修复了这个问题。

答案 1 :(得分:0)

以Jaed发布的@答案为基础。

power_a = [10*(db/10) for db in dB_a] 是不正确的,因为它除以10,然后乘以相同。

它应该是: power_a = [10**(db/10) for db in dB_a]

虽然

仍然可以去@Ed Jaras

注意: 如果你想知道这个[列表中的东西]是什么,那就是列表理解。它们是python允许的非常优雅的结构。

基本上是什么意思是[..将这个元素添加到结果..对于..my元素..在..a列表..]。

如果需要,您甚至可以为他们添加条件。

如果您想了解更多相关信息,建议您查看: http://www.secnetix.de/olli/Python/list_comprehensions.hawk

增加: @ k-schneider:您可能正在对字符串进行数值运算(除法,幂等),这是因为在导入csv时,可以将字段作为字符串导入。 要确保使用整数,可以通过执行以下操作将db转换为字符串: str(db)