Python:CSV-如果其他列足够大,则打印列的值

时间:2018-09-15 13:53:06

标签: python csv

我最近开始使用Python,但在实现以下目标方面遇到困难:

我有一个包含三列(共近100.000行)的.CSV文件:

"date_time","temperature","precipitation" 
"1957-12-31 19:00:00",6.9,0
"1957-12-31 20:00:00",6.6,0 
"1957-12-31 21:00:00",6.8,5.5 
"1957-12-31 22:00:00",7.2,0

我只对第[1]和[2]行(第二和第三行)感兴趣。 如果某行的第三列的值大于某个值,那么我希望将该行的第二列打印/添加到列表中。

例如: 在第四行上,值5.5大于5,因此我想打印值6.8(温度)。最后,我想列出所有雨量大于5毫米的小时的温度清单。

(这样我可以计算出下雨时平均温度是高/低。)

我的主要问题是Python不会将数值视为数字,因此我不能说'如果降水> 5,打印温度'

很抱歉,是否已经在另一个主题中提出了这个问题,我已经搜索这个特定问题已有相当一段时间了,但没有发现任何问题。)

with open("hourly_data_Maastricht.csv", 'r') as g:
  file2 = csv.DictReader(g)
  list = []
  for j['precipitation'] in file2:  
  if float('precipitation') > 5:
    list.append(float(j['temperature']))

答案

感谢所有评论, 我有我的答案,还有很多有用的代码,我希望这些代码能够在将来实现!!

现在我有了这个:

with open("hourly_data_Maastricht.csv", 'r') as file:
reader = csv.DictReader(file)
list = []
for row in reader:
    if float(row['precipitation']) > 5:
        list.append(float(row['temperature']))
        print(row)
print(list)

通过使用print(row)和print(list),我可以确认此代码已完成我需要的工作。

非常感谢大家这么快发布!

4 个答案:

答案 0 :(得分:1)

您实际上并不需要一个列表来计算,只需过滤数据框并取温度列的平均值即可。

import pandas as pd

df = pd.read_csv("hourly_data_Maastricht.csv")
df['precipitation'] = pd.to_numeric(df['precipitation'])
df_filtered = df[[df['precipitation'] > 5]]
avg_temp = df_filtered['temperature'].mean()

答案 1 :(得分:0)

如果您不想为此添加一个全新的框架(熊猫),那么实际上您已经拥有了大多数解决方案,那么您就不会有任何事情:

您正在使用csv.DictReader-它会根据CSV标头创建一个字典! 所以你就这样做:

with open("hourly_data_Maastricht.csv", 'r') as file:
    reader = csv.DictReader(file)
    list = []
    for row in reader:
        if float(row['precipitation']) > 5:
            list.append(float(row['temperature']))

即,您遍历文件中的行,并以列名作为键访问字典中的列。

另请参见the documentation(注意:这是针对Python3的,您没有指定哪个版本)。

答案 2 :(得分:0)

'Pandas是一个开放源代码库,可让您处理.csv,.txt和其他类型的文件。对于您的情况,您应该执行以下操作:

import pandas as pd

df = pd.read_csv('hourly_data_Maastricht.csv') #Now df (short for dataframe) you can manipulate your table.
result = df[df['precipitation'] > 5] 
print(result)

因此,您首先创建数据框,然后过滤所需的值,例如,当您编写此“ result = df [df ['precipitation']> 5]”时,您会说以下内容:其中有一个名为“ precitipation”的列,可为我提供所有高于5的值,然后打印结果。如果要从结果中计算值,例如平均值,标准差,范围,没问题,只需为此调用特定方法。希望对您有帮助!

答案 3 :(得分:0)

感谢所有评论, 我有我的答案,还有很多有用的代码,我希望这些代码能够在将来实现!!

现在我有了这个:

with open("hourly_data_Maastricht.csv", 'r') as file:
reader = csv.DictReader(file)
list = []
for row in reader:
    if float(row['precipitation']) > 5:
        list.append(float(row['temperature']))
        print(row)
print(list)

通过使用print(row)和print(list),我可以确认此代码已完成我需要的工作。

非常感谢大家这么快发布!