2017-01-16 14 views
-1

因此,我有一個示例.dat文件,其中包含一個月的天氣數據作爲空間分隔值。該文件的第一列包含月份的一天;第二個包含當天的最高溫度,而第三個包含最低溫度。使用Python從.dat文件中查找具有最大分佈的行

我也有最後一行在底部包含整個月的聚合值。

理想情況下,我想編寫一個程序來查找.dat文件中具有最大傳播的行,其中傳播將是最高溫度和最低溫度之間的差異。

我想讓我的程序打印當月的日子並傳播到標準輸出。

假設我的計劃被稱爲weather.py,那麼樣品運行將類似於:

$ python weather.py 
2 16 

,這裏是我的.dat文件:

Dy MxT MnT AvT HDDay AvDP 1HrP TPcpn WxType PDir AvSp Dir MxS SkyC MxR MnR AvSLP 

    1 88 59 74   53.8  0.00 F  280 9.6 270 17 1.6 93 23 1004.5 
    2 79 63 71   46.5  0.00   330 8.7 340 23 3.3 70 28 1004.5 
    3 77 55 66   39.6  0.00   350 5.0 350 9 2.8 59 24 1016.8 
    4 77 59 68   51.1  0.00   110 9.1 130 12 8.6 62 40 1021.1 
    5 90 66 78   68.3  0.00 TFH  220 8.3 260 12 6.9 84 55 1014.4 
    6 81 61 71   63.7  0.00 RFH  030 6.2 030 13 9.7 93 60 1012.7 
    7 73 57 65   53.0  0.00 RF  050 9.5 050 17 5.3 90 48 1021.8 
    8 75 54 65   50.0  0.00 FH  160 4.2 150 10 2.6 93 41 1026.3 
    9 86 32* 59  6 61.5  0.00   240 7.6 220 12 6.0 78 46 1018.6 
    10 84 64 74   57.5  0.00 F  210 6.6 050 9 3.4 84 40 1019.0 
    11 91 59 75   66.3  0.00 H  250 7.1 230 12 2.5 93 45 1012.6 
    12 88 73 81   68.7  0.00 RTH  250 8.1 270 21 7.9 94 51 1007.0 
    13 70 59 65   55.0  0.00 H  150 3.0 150 8 10.0 83 59 1012.6 
    14 61 59 60  5 55.9  0.00 RF  060 6.7 080 9 10.0 93 87 1008.6 
    15 64 55 60  5 54.9  0.00 F  040 4.3 200 7 9.6 96 70 1006.1 
    16 79 59 69   56.7  0.00 F  250 7.6 240 21 7.8 87 44 1007.0 
    17 81 57 69   51.7  0.00 T  260 9.1 270 29* 5.2 90 34 1012.5 
    18 82 52 67   52.6  0.00   230 4.0 190 12 5.0 93 34 1021.3 
    19 81 61 71   58.9  0.00 H  250 5.2 230 12 5.3 87 44 1028.5 
    20 84 57 71   58.9  0.00 FH  150 6.3 160 13 3.6 90 43 1032.5 
    21 86 59 73   57.7  0.00 F  240 6.1 250 12 1.0 87 35 1030.7 
    22 90 64 77   61.1  0.00 H  250 6.4 230 9 0.2 78 38 1026.4 
    23 90 68 79   63.1  0.00 H  240 8.3 230 12 0.2 68 42 1021.3 
    24 90 77 84   67.5  0.00 H  350 8.5 010 14 6.9 74 48 1018.2 
    25 90 72 81   61.3  0.00   190 4.9 230 9 5.6 81 29 1019.6 
    26 97* 64 81   70.4  0.00 H  050 5.1 200 12 4.0 107 45 1014.9 
    27 91 72 82   69.7  0.00 RTH  250 12.1 230 17 7.1 90 47 1009.0 
    28 84 68 76   65.6  0.00 RTFH 280 7.6 340 16 7.0 100 51 1011.0 
    29 88 66 77   59.7  0.00   040 5.4 020 9 5.3 84 33 1020.6 
    30 90 45 68   63.6  0.00 H  240 6.0 220 17 4.8 200 41 1022.7 
mo 82.9 60.5 71.7 16 58.8 0.00 6.9 5.3 

我的問題是,即時通訊試圖找出如何獲得最大的傳播。到目前爲止,我已經閱讀了文件並打印出了這些值。我的下一步將獲得最大傳播量?

我迄今爲止代碼:

#!/usr/bin/env python 


# read and print weather file 
filename = "weather.dat" 

with open(filename) as fn: 
    content = fn.readlines() 

print(content) 

任何線索和協助,這將是有益的。

+1

遍歷文件;在白色空間分割每一行;提取一天和極端溫度並減去;與先前*保存的*最大差價進行比較;如果它更大 - 拯救這一天及其傳播;如果不是更大繼續。 – wwii

+0

這是一個功課題嗎? – wwii

+0

您是否暗示我使用for-loop類型? – kimaiga

回答

1

你可以用大熊貓嘗試像這樣:

import pandas as pd 

df = pd.read_csv('your_file.dat', sep='\s+') 
df[['MxT', 'MnT']] = df[['MxT', 'MnT']].apply(lambda x: x.str[:2].astype(int)) 
a = df.MxT - df.MnT 
b = a.index[a==max(a)].tolist() 
df.loc[b] 

輸出:

enter image description here

如果你只想日,MXT和MNT,你可以這樣說:

df.loc[b][['Dy', 'MxT', 'MnT']].unstack().tolist() 

輸出:

[9, 86, 32] 
+0

好的,你能否向我解釋你爲什麼使用熊貓導入?同樣也是解決方案的細分。謝謝 – kimaiga

+0

@kimaiga Pandas是一個數據分析工具。在此處閱讀更多內容:http://pandas.pydata.org/pandas-docs/stable/10min.html或觀看本系列:https://www.youtube.com/watch?v=eRpFC2CKvao&list=PLyBBc46Y6aAz54aOUgKXXyTcEmpMisAq3 – MYGz

+0

@kimaiga檢查更新的解決方您的'.dat'文件中的最大和最小差值已經標記爲'*'。如果你被允許,你可以使用它。 – MYGz

相關問題