我最近开始使用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),我可以确认此代码已完成我需要的工作。
非常感谢大家这么快发布!
答案 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),我可以确认此代码已完成我需要的工作。
非常感谢大家这么快发布!