繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM