【问题标题】:Reading a csv file and counting a row depending on another row读取 csv 文件并根据另一行计算一行
【发布时间】:2017-03-25 17:05:43
【问题描述】:

我有一个 csv 文件,我需要在其中读取不同的列并根据数据集中的另一行总结它们的数字。
问题是:

飞行阶段(例如起飞、巡航、着陆……)有何影响 致死?

我必须为第 28 列中的每个不同数据总结第 23 列。

我有一个带有掩码和大量 IF 语句的解决方案:

database = pd.read_csv('Aviation.csv',quotechar='"',skipinitialspace=True, delimiter=',', encoding='latin1').fillna(0)
data = database.as_matrix()

TOcounter = 0

for r in data:
    if r[28] == "TAKEOFF":
        TOcounter += r[23]
print(TOcounter)

这个例子展示了我的解决方案的总体思路。我必须为第 28 列中的每个不同数据添加大量 if 语句和计数器。 但我想知道这个问题是否有更聪明的解决方案。
原始数据可以在:https://raw.githubusercontent.com/edipetres/Depressed_Year/master/Dataset_Assignment/AviationDataset.csv

【问题讨论】:

    标签: python csv pandas numpy collections


    【解决方案1】:

    听起来你想要实现的是

    df.groupby('Broad.Phase.of.Flight')['Total.Fatal.Injuries'].sum()
    

    【讨论】:

    • 没错。我知道我把它复杂化了。非常感谢您的快速回复!
    • 有没有办法可以选择 Broad.Phase.of.Flight 以便绘制数据?现在我只能从变量中得到 total.fatal.injuries
    • 如果您想要分类数据的条形图,您只需将.plot.bar() 附加到上面的配方即可。
    【解决方案2】:

    这是一个快速的解决方案,不检查是否可以将字符串转换为浮点数之类的错误。此外,您应该考虑搜索正确的列(带文本)而不是依赖列索引(如 23 和 28)

    但这应该可行:

    import csv
    import urllib2
    import collections
    
    url = 'https://raw.githubusercontent.com/edipetres/Depressed_Year/master/Dataset_Assignment/AviationDataset.csv'
    response = urllib2.urlopen(url)
    df = csv.reader(response)
    
    d = collections.defaultdict(list)
    for i,row in enumerate(df):
        key = row[28]
        if key == "" or i == 0 : continue
        val = 0 if(row[23]) ==""  else float(row[23])
        d.setdefault(key,[]).append(val)
    
    d2 = {}
    for k, v in d.iteritems(): d2[k] = sum(v)
    for k, v in d2.iteritems(): print "{}:{}".format(k,v)
    

    结果:

    TAXI:110.0
    STANDING:193.0
    MANEUVERING:6430.0
    DESCENT:1225.0
    UNKNOWN:919.0
    TAKEOFF:5267.0
    LANDING:592.0
    OTHER:107.0
    CRUISE:6737.0
    GO-AROUND:783.0
    CLIMB:1906.0
    APPROACH:4493.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多