使用Pandas处理含Nan值的不规范txt文件并转换数据结构
解决思路
- 第一步:对
lat列使用前向填充(ffill()),给每一行标记所属的城镇纬度,作为后续分组的依据 - 第二步:按填充后的纬度分组,提取每个分组内除首行(存城镇名、经纬度的行)之外的
Town列数值,作为当前纬度对应的数值列表 - 第三步:将不同长度的数值列表补全为等长(短列表末尾补
np.nan),即可转换为目标格式的DataFrame
可直接运行的实现代码如下:
import pandas as pd import numpy as np # 你的原始DataFrame data = {'Town':['Chicago', 1.11, 1.45, 0.86, 2.68, np.nan, 'Philly', 1.35, 1.55, 3.7], 'lat':[41.878, np.nan, np.nan, np.nan, np.nan, np.nan, 39.9526, np.nan, np.nan, np.nan], 'long':[-87.6298, np.nan, np.nan, np.nan, np.nan, np.nan, -75.165, np.nan, np.nan, np.nan]} df = pd.DataFrame(data) # 前向填充lat列生成分组键 df['group_key'] = df['lat'].ffill() # 按分组键收集对应数值 grouped_data = df.groupby('group_key')['Town'].apply(lambda x: list(x.iloc[1:])).to_dict() # 格式化key为四位小数字符串,适配目标格式 grouped_data = {f"{key:.4f}": value for key, value in grouped_data.items()} # 补全不等长列表 max_length = max(len(val) for val in grouped_data.values()) for key in grouped_data: grouped_data[key] += [np.nan] * (max_length - len(grouped_data[key])) # 生成目标DataFrame df_wanted = pd.DataFrame(grouped_data)
该方案兼容不同长度的数值分组,无论对应数值是13条还是100条都可以正常处理。
内容的提问来源于stack exchange,提问作者rypo06
相关产品推荐
相关产品推荐

