Pandas DataFrame处理:关联CSV中ID与键值对并清洗数据
解决方案
你的数据中,id和email非空的行是分组标识,后续notes_key/notes_value非空的行属于该分组。通过以下步骤可实现需求:
- 将原数据中的字符串
'NaN'转换为真正的缺失值(np.nan),便于pandas处理; - 用前向填充(
ffill)把分组的id和email传递给对应的键值对行; - 过滤掉无有效键值对的行。
完整代码
import pandas as pd import numpy as np # 初始化原数据 data = [[12,'abc@xyz.com', 'NaN', 'NaN' ], [12,'abc@xyz.com','NaN' , 'NaN'], ['NaN', 'NaN','x' , 'y' ] , ['NaN','NaN', 'a','b'] , ['13','qwer@123.com','NaN','NaN'],['NaN','NaN', 'x','r']] df = pd.DataFrame(data , columns = ['id' , 'email','notes_key' , 'notes_value']) # 转换字符串'NaN'为真实缺失值 df = df.replace('NaN', np.nan) # 前向填充id和email,关联分组与键值对 df[['id', 'email']] = df[['id', 'email']].ffill() # 过滤掉无有效键值对的行 result_df = df.dropna(subset=['notes_key']).reset_index(drop=True) print(result_df)
输出结果
id email notes_key notes_value 0 12 abc@xyz.com x y 1 12 abc@xyz.com a b 2 13 qwer@123.com x r
内容的提问来源于stack exchange,提问作者Ramesh Singh
相关产品推荐
相关产品推荐

