如何用Pandas读取URL中存在不均匀空格的文本文件至DataFrame?
解决方法
这类气象站描述文件属于固定宽度格式(Fixed-Width Format),并非普通的空格分隔格式——部分列(比如站点名称)内部包含空格,这就是sep='\s+'和delim_whitespace=True失效的核心原因。以下是可行的处理方案:
方法1:用read_fwf自动识别列宽
Pandas的read_fwf方法专门针对固定宽度文本设计,能自动识别列的边界:
import pandas as pd import requests from io import StringIO url = "https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/hourly/air_temperature/recent/TU_Stundenwerte_Beschreibung_Stationen.txt" # 获取文件内容并转为可读取的字符串对象 response = requests.get(url) content = response.content.decode('utf-8') # 跳过前2行注释(根据文件实际结构调整),读取数据 df = pd.read_fwf(StringIO(content), skiprows=2)
方法2:手动指定列宽度(更可靠)
如果自动识别列宽不准确,可先查看文件前几行确认结构,再手动定义每列宽度:
# 打印前5行,确认列的字符边界 print('\n'.join(content.split('\n')[0:5])) # 根据实际列宽定义(示例宽度,需结合文件调整) col_widths = [7, 10, 50, 12, 12, 8, 8] df = pd.read_fwf(StringIO(content), skiprows=2, widths=col_widths)
补充提示
- 若出现编码错误,将
decode('utf-8')替换为decode('latin-1')即可适配德语文本编码。 - 读取完成后用
df.head()检查数据结构,确认列是否正确分割。
内容的提问来源于stack exchange,提问作者Chhandosee Bhattacharya
相关产品推荐
相关产品推荐

