[英]Python: CSV - print value of column if other column is big enough
我最近开始使用Python,但我无法实现以下目标:
我有一个包含3列的.CSV文件(总共接近100.000行):
"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)
通过使用打印(行)和打印(列表),我可以确认此代码完成了我需要它做的事情。
非常感谢大家发帖这么快!
您实际上不需要列表来计算,您可以只过滤数据帧并获取温度列的平均值。
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()
如果你不想为此包含一个全新的框架(pandas),你实际上已经拥有了大部分解决方案,你只是没有看到一件事:
您正在使用csv.DictReader
- 它根据CSV标头创建一个dict! 所以你只需:
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']))
即,您遍历文件中的行,并以列名作为键访问dict中的列。
另请参阅文档 (注意:这是针对Python3的,您没有指定哪个版本)。
'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的值,然后打印结果。 如果你想从结果中计算一些东西,从示例mean,std,range,没问题,只需为此调用特定的方法。 希望这对你有所帮助!
感谢所有的评论,我得到了我的答案和许多有用的代码,我将在未来实现它!
现在我有了这个:
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)
通过使用打印(行)和打印(列表),我可以确认此代码完成了我需要它做的事情。
非常感谢大家发帖这么快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.