Home > Software design >  Read space separated text file in pandas
Read space separated text file in pandas

Time:09-22

I am trying to read a text file present in this url into a pandas dataframe. https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/hourly/air_temperature/recent/TU_Stundenwerte_Beschreibung_Stationen.txt

It has uneven spacing between columns. I have tried sep='\s ', delim_whitespace=True but none of these are working. Please suggest a way to read this text file into pandas dataframe.

CodePudding user response:

The read_fwf function in pandas can read a file with a table of fixed-width formatted lines into a DataFrame.

The header line confuses the auto-width calculations so best to skip the header lines and explicitly add the column names so in this case the argument skiprows=2 is added.

import pandas as pd

url ='https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/hourly/air_temperature/recent/TU_Stundenwerte_Beschreibung_Stationen.txt'

df = pd.read_fwf(url, encoding="ansi", skiprows=2,
                 names=['Stations_id', 'von_datum', 'bis_datum', 'Stationshoehe',
                        'geoBreite', 'geoLaenge', 'Stationsname', 'Bundesland'])
print(df)

Output:

     Stations_id  von_datum  bis_datum  Stationshoehe  geoBreite  geoLaenge           Stationsname           Bundesland
0              3   19500401   20110331            202    50.7827     6.0941                 Aachen  Nordrhein-Westfalen
1             44   20070401   20220920             44    52.9336     8.2370           Großenkneten        Niedersachsen
2             52   19760101   19880101             46    53.6623    10.1990   Ahrensburg-Wulfsdorf   Schleswig-Holstein
3             71   20091201   20191231            759    48.2156     8.9784        Albstadt-Badkap    Baden-Württemberg
4             73   20070401   20220920            340    48.6159    13.0506   Aldersbach-Kriestorf               Bayern
..           ...        ...        ...            ...        ...        ...                    ...                  ...
663        19171   20200901   20220920             13    54.0038     9.8553     Hasenkrug-Hardebek   Schleswig-Holstein
664        19172   20200901   20220920             48    54.0246     9.3880                 Wacken   Schleswig-Holstein

[665 rows x 8 columns]

If want to load the file locally and open it then just change the url to the local file name.

df = pd.read_fwf('TU_Stundenwerte_Beschreibung_Stationen.txt', encoding="ansi", skiprows=2,
                 names=['Stations_id', 'von_datum', 'bis_datum', 'Stationshoehe',
                 'geoBreite', 'geoLaenge', 'Stationsname', 'Bundesland'])
  • Related