You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中保留指定列并删除其余列后存入数据库?

Pandas 保留指定列并删除其余列的方法

我在Pandas中创建了一个DataFrame,里面包含一些不需要的列。想在存入数据库前仅保留所需列,删除其余列。是否可以通过指定列列表,删除DataFrame中不在列表内的列?

示例代码如下:

list_to_database = ['Name', 'Age', 'ZipCode', 'Email'..etc]

response = req.get(url)
json = response.json()
dt = pd.json_normalize(json, sep='_')

# 删除不在列表中的列

这种需求很关键,因为不同数据的列数不同,API还会返回新增的自定义列。比如API返回的数据结构如下:

{
  "user": 1,
  "name": "whatever",
  "Age": ....,
  "Zipcode": ...,
  "Email": ...,
  ...

  "customized": {
     "child1": "may or may not",
     "partner": "may or may not",
  },
  "others": {
     "scholarity": ....
  }
}
{
  "user": 2,
  "name": "I don't know",
  "Age": ....,
  "Zipcode": ...,
  "Email": ...,
  ...

  "customized": {
     "partner": "may or may not",
     "parents": "may or may not",
  },
  "others": {
     "scholarity": ....,
     "student": "Y/N"
  }
}

方法1:直接筛选目标列(推荐)

最简洁高效的方式就是直接用目标列列表索引DataFrame,只保留需要的列。如果目标列表里有部分列在DataFrame中不存在,用intersection方法可以避免报错,自动只保留实际存在的目标列:

target_columns = ['Name', 'Age', 'ZipCode', 'Email']
# 找出DataFrame中存在的目标列
existing_target_cols = dt.columns.intersection(target_columns)
# 筛选得到仅含目标列的新DataFrame
dt_filtered = dt[existing_target_cols]

方法2:删除无关列

如果你需要明确删除不在目标列表里的列,可以先找出这些无关列,再用drop方法移除:

target_columns = ['Name', 'Age', 'ZipCode', 'Email']
# 生成需要删除的列列表
cols_to_drop = [col for col in dt.columns if col not in target_columns]
# 删除无关列
dt_filtered = dt.drop(columns=cols_to_drop)

如果遇到API返回列名大小写不统一的情况(比如列表里是ZipCode,但返回的是Zipcode),可以先统一大小写再处理:

target_columns = ['Name', 'Age', 'ZipCode', 'Email']
# 把DataFrame的列名转成小写
dt.columns = dt.columns.str.lower()
# 目标列表也转成小写
target_cols_lower = [col.lower() for col in target_columns]
# 筛选列
existing_target_cols = dt.columns.intersection(target_cols_lower)
dt_filtered = dt[existing_target_cols]
# 可选:把列名改回目标格式
dt_filtered.columns = [col.title() for col in existing_target_cols]

方法3:用reindex指定列

reindex可以帮你按指定顺序排列列,同时自动丢弃不在目标列表里的列,搭配drop=True还会忽略不存在的目标列:

target_columns = ['Name', 'Age', 'ZipCode', 'Email']
dt_filtered = dt.reindex(columns=target_columns, drop=True)

内容的提问来源于stack exchange,提问作者Guaraci Falcão

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:05:26