基于指定dialog_id拆分Pandas大DataFrame的最优实现方法
Pandas大型DataFrame按指定频道拆分的优雅方法
直接用isin()方法就能搞定,这是处理多值匹配最简洁高效的方式,比堆一堆逻辑或运算符靠谱多了:
- 先把你要拆分的13个目标
dialog_id存成列表:
target_dialog_ids = [-1001232032465, -1001153765346, ...] # 补全剩下的11个ID
- 拆分出目标频道的DataFrame:
# 方法1:布尔索引(最常用) df_selected = df[df['dialog_id'].isin(target_dialog_ids)] # 方法2:用loc(适合需要同时筛选列的场景) df_selected = df.loc[df['dialog_id'].isin(target_dialog_ids), :] # 方法3:query写法(贴近SQL逻辑,可读性强) df_selected = df.query('dialog_id in @target_dialog_ids')
- 拆分出剩下的13个频道的DataFrame,给布尔条件加取反符号
~即可:
# 对应方法1 df_rest = df[~df['dialog_id'].isin(target_dialog_ids)] # 对应方法3 df_rest = df.query('dialog_id not in @target_dialog_ids')
为啥你之前用&不行?
&是逻辑与,而你需要的是“匹配x或y或z...”的逻辑或,就算换成|,13个条件写起来会超级冗长还容易出错,isin()就是Pandas专门为这种多值匹配场景设计的,既优雅又能保证性能,70万行的量级完全没问题。
验证拆分是否正确
可以跑两行代码确认:
# 检查总行数是否和原数据一致 print(len(df_selected) + len(df_rest) == len(df)) # 正常会返回True # 检查两个DataFrame的频道数量 print(df_selected['dialog_id'].nunique()) # 应该是13 print(df_rest['dialog_id'].nunique()) # 应该是13
内容的提问来源于stack exchange,提问作者Софія Гринь
相关产品推荐
相关产品推荐

