如何移除DataFrame中的None值并将a至f列转换为列表
解决方法:移除DataFrame中的None值并转换为指定列表格式
步骤说明
针对DataFrame的每行,提取a到f列的所有子列表,过滤掉包含None的子列表,最后将剩余子列表合并为一个新列表。
示例代码
首先构造与你提供一致的示例DataFrame:
import pandas as pd data = { 'emp_no': [11390, 11395, 11397, 11522, 11525], 'a': [[1, 28.4], [1, 31.4], [1, 33.0], [1, 34.0], [1, 32.7]], 'b': [[7, 32.2], [7, 32.8], [7, 33.1], [7, 32.4], [7, 31.9]], 'c': [[7, 31.3], [7, None], [7, 31.5], [7, 32.6], [7, 32.0]], 'd': [[28, 40.7], [28, 37.3], [28, None], [28, 45.4], [28, None]], 'e': [[28, 40.0], [28, 39.2], [28, 40.4], [28, 45.9], [28, 44.4]], 'f': [[28, 39.6], [28, None], [28, 41.0], [28, 46.9], [28, 46.1]], 'id': ['nhvm657mjhgmjhm', 'hjgj6hgjgghjjh', 'fjyj676hjhjhg', '65hjhgjghj766', 'ftghjy6757hjh'] } df = pd.DataFrame(data)
然后编写处理逻辑:
# 定义每行的处理函数 def process_row(row): # 提取a到f列的子列表集合 cols = row[['a', 'b', 'c', 'd', 'e', 'f']].tolist() # 过滤掉包含None的子列表 filtered_list = [lst for lst in cols if None not in lst] return filtered_list # 对每行应用处理函数,生成结果列表 result = df.apply(process_row, axis=1).tolist() # 按期望格式输出 for idx, lst in enumerate(result): print(f'df[{idx}] = {lst}')
运行结果
df[0] = [[1, 28.4], [7, 32.2], [7, 31.3], [28, 40.7], [28, 40.0], [28, 39.6]] df[1] = [[1, 31.4], [7, 32.8], [28, 37.3], [28, 39.2]] df[2] = [[1, 33.0], [7, 33.1], [7, 31.5], [28, 40.4], [28, 41.0]] df[3] = [[1, 34.0], [7, 32.4], [7, 32.6], [28, 45.4], [28, 45.9], [28, 46.9]] df[4] = [[1, 32.7], [7, 31.9], [7, 32.0], [28, 44.4], [28, 46.1]]
关键说明
df.apply(process_row, axis=1)指定按行处理数据,确保每一行的a-f列都能被单独处理- 列表推导式
[lst for lst in cols if None not in lst]直接过滤掉包含None的子列表,保证最终结果符合要求
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

