如何提取CSV列中最后一条记录的日期至新列?
嘿,这个需求我之前帮人处理过类似的,给你几个实用的方案,看你平时习惯用哪种工具:
方法1:Python + Pandas(适合处理大文件,11000行毫无压力)
如果你会点Python,这个方法最快最灵活,尤其适合后续还要做其他数据处理的情况。步骤很简单:
- 先安装pandas(如果没装的话,运行
pip install pandas) - 用下面的代码处理:
import pandas as pd # 替换成你的CSV文件路径 df = pd.read_csv("your_data.csv") # 定义一个函数,专门提取每行最后一条记录的日期 def extract_last_date(record_text): # 把整条内容按"► "分割,得到所有单独的记录,同时过滤掉空字符串 all_records = [r.strip() for r in record_text.split("► ") if r.strip()] if not all_records: # 万一某行没有记录,返回空值 return None # 取最后一条记录,按" | "拆分,日期是第二个元素 last_record = all_records[-1] record_parts = last_record.split(" | ") return record_parts[1] if len(record_parts) >= 2 else None # 把函数应用到目标列,生成新列 # 把"target_column"替换成你那个包含多条记录的列的名称 df["Last_Record_Date"] = df["target_column"].apply(extract_last_date) # 保存处理后的文件 df.to_csv("processed_data.csv", index=False)
替换好文件名和列名,运行代码就行,几秒就能搞定11000行。
方法2:Excel公式(适合不想写代码的朋友)
如果平时用Excel多,用公式就能解决。假设你的目标列是A列,在B1单元格输入下面的公式(Excel 365及以上版本推荐用这个,更清晰):
=LET( last_record, TRIM(MID(SUBSTITUTE(A1,"► ",REPT(" ",LEN(A1))),LEN(A1)*(LEN(A1)-LEN(SUBSTITUTE(A1,"► ","")))/LEN("► "),LEN(A1))), date_segment, MID(last_record,FIND(" | ",last_record)+3,FIND(" | |",last_record)-FIND(" | ",last_record)-3), TRIM(date_segment) )
输入完按回车,然后下拉填充到所有行就搞定了。
要是你用的是旧版Excel(没有LET函数),可以拆分两步:
- 先在B1提取最后一条记录:
=TRIM(MID(SUBSTITUTE(A1,"► ",REPT(" ",LEN(A1))),LEN(A1)*(LEN(A1)-LEN(SUBSTITUTE(A1,"► ","")))/LEN("► "),LEN(A1))) - 再在C1提取日期:
=TRIM(MID(B1,FIND(" | ",B1)+3,FIND(" | |",B1)-FIND(" | ",B1)-3))
同样下拉填充就行。
方法3:Power Query(Excel/Power BI专属,适合做数据清洗流程)
如果经常处理这类数据清洗任务,Power Query是个好工具,步骤如下:
- 打开Excel,选中你的数据表格,点击「数据」选项卡 -> 「从表格/范围」(会自动打开Power Query编辑器)
- 选中目标列,点击「添加列」-> 「自定义列」
- 在弹出的窗口里输入M语言公式(把
[Target Column]换成你的列名):
let split_records = Text.Split([Target Column], "► "), clean_records = List.RemoveItems(split_records, {""}), last_record = List.Last(clean_records), split_parts = Text.Split(last_record, " | "), final_date = split_parts{1} in final_date
- 点击确定,然后关闭Power Query并上载数据到Excel,新列就生成好了。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

