如何从ARL NOAA读取txt文件

时间:2017-04-06 21:24:06

标签: python pandas

晚上好!我想从txt文件创建一个数据框,它位于https://ready.arl.noaa.gov/readyou/174479_METGRAM.TXT。文本文件是:

HR             
0     + 0.    13.0   3.3   51.50   0.0   97.4   0.0   0.0   7.0          
1     + 3.    21.7   4.8   33.00   0.0   90.5   0.0   0.0   4.8        
2     + 6.    30.6   0.3   14.30   0.0   57.8   0.0   0.0   3.3 
.      
.      
51   +153.    31.2  -2.3   11.3   0.00   5.1    20.1  -0.9  1.7  
52   +156.    28.5  -0.5   15.2   0.00   12.2   86.0  -4.5  1.4

我读了数据:

df = pd.read_table('https://ready.arl.noaa.gov/readyou /174479_METGRAM.TXT',skiprows=1,sep ='\ s +',header = None)

     0     1     2       3      4       5     6      7      8      9         
0    +     0.0  13.0    3.3    51.50   0.0   97.4   0.0    0.0    7.0          
1    +     3.0  21.7    4.8    33.00   0.0   90.5   0.0    0.0    4.8        
2    +     6.0  30.6    0.3    14.30   0.0   57.8   0.0    0.0    3.3       
.          
.          
.
51  +153.  31.2  -2.3  11.3    0.00    5.1   20.1   -0.9   1.7    NaN
52  +156.  28.5  -0.5  15.2    0.00    12.2  86.0   -4.5   1.4    NaN
53  +159.  17.6   1.9  34.9    0.17    0.5  126.2  -26.3   5.6    NaN  

我想得到这个:

      0      1      2       3      4       5     6      7      8               
0    +0.0  13.0    3.3    51.50   0.0    97.4   0.0    0.0    7.0          
1    +3.0  21.7    4.8    33.00   0.0    90.5   0.0    0.0    4.8        
2    +6.0  30.6    0.3    14.30   0.0    57.8   0.0    0.0    3.3       
.          
.          
.
51  +153.  31.2    -2.3    11.3   0.00   5.1    20.1  -0.9    1.7 
52  +156.  28.5    -0.5    15.2   0.00   12.2   86.0  -4.5    1.4
53  +159.  17.6     1.9    34.9   0.17   0.5   126.2  -26.3   5.6  

我怎么能得到这个?

1 个答案:

答案 0 :(得分:0)

如果每个列由2个或更多空格分隔,则可以使用regex pattern \s{2,}解析数据。例如,

df = pd.read_table('https://ready.arl.noaa.gov/readyou /174479_METGRAM.TXT',
                   skiprows=1, sep='\s{2,}',header=None)

如果某些列之间只有1个空格,但+ 0.必须被识别为单个值,那么您可以使用正则表达式模式(?<![+-])\s+。此正则表达式匹配1个或多个空格,前面没有加号或减号。因此,数字之间的单个空格可以被识别为分隔符,但+0.之间的空格不会被视为分隔符,因为此空格前面带有加号。

如果列由制表符分隔,则可以通过正则表达式模式\t+指定列分隔符,该模式匹配1个或更多选项卡。您发布的代码段似乎没有使用制表符作为分隔符,但我想我提到这一点,以防标签在粘贴过程中以某种方式转换为空格。