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