我已经阅读了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)
答案 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)