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

Python:CSV-如果其他列足够大,则打印列的值,python,csv,Python,Csv,我最近刚开始使用Python,但在实现以下目标时遇到了困难: 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) 我有一个包含3列的.CSV文件(总共将近100.000行): 我只对

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

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)
我有一个包含3列的.CSV文件(总共将近100.000行):

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

例如: 在第四行,值5.5大于5,因此我希望打印值6.8(温度)。最后,我想列出降雨量>5mm时的所有温度

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

我的主要问题是Python不把值看作数字,所以我不能说“如果降水量>5,打印温度”

很抱歉,如果这个问题已经在另一个主题中被问到了,我搜索这个问题已经有一段时间了,但没有找到任何东西。)


答复


谢谢大家的评论, 我已经得到了我的答案和很多有用的代码,我将研究这些代码,以便将来能够实现它

现在我有了这个:

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)
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(行)和print(列表),我可以确认这段代码做了我需要它做的事情


非常感谢大家这么快发帖

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

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']))
i、 例如,您迭代文件中的行,并使用列名作为键访问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['deposition']>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)
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(行)和print(列表),我可以确认这段代码做了我需要它做的事情


非常感谢大家这么快发帖

如果你有一个csv.reader在输入上循环,那么转换你的相关列以便比较工作。。。例如:
if float(my_列)>5)
。。。到目前为止,您是否有代码可以显示读取文件的代码,并且有人可以帮助您完成缺少的步骤?我现在编写的代码在上面,我不知道如何引用(我的_列),请尝试
查看文件中的行2:print(row)
,您将看到一个列名称及其值的字典。。。你应该可以从那里开始…谢谢你的回答。但现在我认为Python将列“沉淀”和值视为字符串,不允许我将字符串值与5进行比较。虽然在这里,OPs使用
pandas
,但这项任务可能有些过火,对于Python新手来说可能不是一个好的起点。这是真的,另一方面,如果OP将来需要在该数据帧上做更多的操作,这对他来说可能还是有用的。我将研究这段代码,看看我是否能理解它。非常感谢。谢谢!我现在有一门课程,其中Python被认为是先验知识,但我以前从未编写过:)我明白了。好吧,给自己买些python课程/书籍!有很多免费的。我听说过这方面的好消息:(第5章解释了听写)谢谢,这有助于我更好地理解Python!