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

如何使用Python或R将DataFrame整理为所需格式?

可直接复用的清洗方案

核心逻辑无需手动逐行处理:先识别ID列中混入的日期行,将日期行携带的有效NF值向下填充到其管辖的所有ID行,最后过滤掉所有日期行即可得到目标结构。


Python 实现(基于pandas)

  1. 未安装依赖先执行安装命令:
pip install pandas openpyxl
  1. 替换代码中的文件路径后直接运行即可:
import pandas as pd
import re

# 日期格式匹配规则,若导出的日期格式和常规年月日格式不一致,修改此处正则即可
def match_date(input_str):
    return bool(re.match(r"^\d{4}[-/]\d{1,2}[-/]\d{1,2}$", str(input_str).strip()))

# 读取原始数据,csv格式可替换为pd.read_csv()
raw_df = pd.read_excel("你的原始数据文件路径.xlsx")

# 将非日期行的NF值置空,为向下填充做准备
raw_df.loc[~raw_df["ID"].apply(match_date), "NF"] = None
# 向下填充NF值:每个日期行的NF会自动填充到下方所有ID行,直到碰到下一个日期行
raw_df["NF"] = raw_df["NF"].ffill()

# 过滤掉所有日期行,得到最终清洗结果
clean_df = raw_df[~raw_df["ID"].apply(match_date)].reset_index(drop=True)

# 导出结果,csv格式可替换为to_csv()
clean_df.to_excel("清洗完成的结果.xlsx", index=False)

R 实现(基于tidyverse)

  1. 未安装依赖先执行安装命令:
install.packages(c("tidyverse", "readxl", "writexl"))
  1. 替换代码中的文件路径后直接运行即可:
library(tidyverse)
library(readxl)
library(writexl)

# 日期格式匹配规则,和Python版本逻辑一致
match_date <- function(s) {
  str_detect(str_trim(as.character(s)), "^\\d{4}[-/]\\d{1,2}[-/]\\d{1,2}$")
}

clean_df <- read_excel("你的原始数据文件路径.xlsx") %>%
  # 非日期行NF置空
  mutate(NF = ifelse(!match_date(ID), NA_character_, NF)) %>%
  # 向下填充NF值
  fill(NF, .direction = "down") %>%
  # 过滤日期行
  filter(!match_date(ID))

# 导出结果
write_xlsx(clean_df, "清洗完成的结果.xlsx")

适配调整提示

  • 若导出的日期是日/月/年、月-日-年等其他格式,仅需修改match_date函数里的正则匹配规则即可
  • 若数据开头存在没有前置日期的ID行,清洗后对应NF列为空,可根据业务规则单独处理这类边缘情况
  • 处理前建议备份原始文件,避免误操作丢失数据

内容的提问来源于stack exchange,提问作者sohrenan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:54:24