使用Python从.dat文件中查找具有最大排列的行

使用Python从.dat文件中查找具有最大排列的行,python,csv,Python,Csv,因此,我有一个示例.dat文件,其中包含一个月的天气数据,作为空格分隔的值。文件的第一列包含月份的日期;第二个包含当天的最高温度,而第三个包含最低温度 我在底部还有最后一行,它包含整个月的聚合值 理想情况下,我想编写一个程序来查找.dat文件中具有最大排列的行,其中排列是最高温度和最低温度之间的差值 我想让我的程序打印一个月中的哪一天,并扩展到标准输出 假设我的程序名为weather.py,则示例运行如下所示: $ python weather.py 2 16 这是我的.dat文件:

因此,我有一个示例.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)

这方面的任何线索和帮助都会有所帮助

你可以像这样尝试熊猫:

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]
输出:

[9, 86, 32]

如果您只想要一天,MxT和MnT,您可以这样获得:

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

[9, 86, 32]

迭代文件;在空白处拆分每一行;提取白天和极端温度并减去;与之前保存的最大价差进行比较;如果它更大——保存今天和它的传播;如果不是更大,继续。这是一个家庭作业问题吗?你是在暗示我使用for循环吗?好的,你能给我解释一下你为什么使用Panda导入吗?就像解决方案的分解一样。Thanks@kimaiga熊猫是一种数据分析工具。请在此阅读更多信息:或观看本系列:@kimaiga Check更新的解决方案。在
.dat
文件中,最大和最小排列已标记为
*
。如果允许的话,你可以使用它。它不会像我期望的那样在我的控制台上打印我的输出,而是给我空白的输出在最后一行使用
print
语句。我不需要它,因为我正在使用IPython笔记本。例如,打印(df2.unstack().tolist())