在Python中将数字数据从CSV转换为浮点并获得平均值

在Python中将数字数据从CSV转换为浮点并获得平均值,python,Python,我有以下python函数,它接受目录和文件名的输入 它从CSV文件中读取,该文件可以有一行“null”作为值 tps.csv 1 2 3 4 null 5 6 我需要添加或更改什么以使其忽略/跳过非数值?在文件中,一行以\n结尾。然后是字符串null\n,而不是null。 处理该问题的最佳方法可能是使用strip方法,该方法专为以下目的而设计: if line.strip() != 'null': ... 请注意,是不在此处使用 在文件中,一行以\n结尾。然后是字符串null\n,而

我有以下python函数,它接受目录和文件名的输入

它从CSV文件中读取,该文件可以有一行“null”作为值

tps.csv 1 2 3 4 null 5 6
我需要添加或更改什么以使其忽略/跳过非数值?

在文件中,一行以
\n
结尾。然后是字符串
null\n
,而不是
null
。 处理该问题的最佳方法可能是使用
strip
方法,该方法专为以下目的而设计:

if line.strip() != 'null':
    ...

请注意,
不在此处使用

在文件中,一行以
\n
结尾。然后是字符串
null\n
,而不是
null
。 处理该问题的最佳方法可能是使用
strip
方法,该方法专为以下目的而设计:

if line.strip() != 'null':
    ...

请注意,
不在此处使用

使用比较代替
不是

if line != 'null':
/
不是
检查对象标识,而
=
/
=比较对象的值。在您的例子中,该行与常量字符串
null
具有相同的值,但它们是不同的对象

注意,由于Python的内部结构,将字符串与
is
进行比较有时会起作用,但并不总是如此

>>> 'foo' is 'foo'
True
>>> 'foobar'[:3] is 'foo'
False 

使用比较而不是
is not

if line != 'null':
/
不是
检查对象标识,而
=
/
=比较对象的值。在您的例子中,该行与常量字符串
null
具有相同的值,但它们是不同的对象

注意,由于Python的内部结构,将字符串与
is
进行比较有时会起作用,但并不总是如此

>>> 'foo' is 'foo'
True
>>> 'foobar'[:3] is 'foo'
False 

is
与str
str==str
中的
str操作不同,因此错误

我相信你可以通过一个列表来做到这一点

with open(csv_filename) as f:
    numbers = [float(l.strip()) for l in f if l != 'null']
return 0 if len(numbers) == 0 else sum(numbers) / float(len(numbers))

is
与str
str==str
中的
str操作不同,因此错误

我相信你可以通过一个列表来做到这一点

with open(csv_filename) as f:
    numbers = [float(l.strip()) for l in f if l != 'null']
return 0 if len(numbers) == 0 else sum(numbers) / float(len(numbers))

您可以共享错误/回溯吗?请尝试将行中的if条件更改为-if'null'而不是行不为null。您可以共享错误/回溯吗?尝试将行中的if条件更改为-if'null'而不是行不为null。谢谢。这是我找到的最短的解决方案。我将其与@aluriak answer结合使用,并在列表中添加了.strip(),如果l.strip()!='谢谢。这是我找到的最短的解决方案。我将其与@aluriak answer结合使用,并在列表中添加了.strip(),如果l.strip()!='谢谢你的解释,谢谢你的解释。