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

如何用PHP基于CSV2替换CSV1中指定匹配条件的Close列值

用Python Pandas实现CSV列替换(多条件匹配)

我来帮你搞定这个CSV列替换的需求,用Python的pandas库就能高效实现,尤其是数据量较大的时候,比手动处理或者Excel公式靠谱多了。下面是具体步骤和代码:

步骤说明

  1. 读取两个CSV文件,确保路径正确
  2. 基于指定的5个匹配列进行左连接(保留第一个CSV的所有行)
  3. 将第一个CSV的CLOSE列替换为第二个CSV匹配到的LTP值
  4. 清理多余列并保存结果

完整代码示例

import pandas as pd

# 替换成你的实际CSV文件路径
csv1_path = "your_first_csv.csv"
csv2_path = "your_second_csv.csv"
output_path = "updated_first_csv.csv"

# 读取两个CSV文件
df1 = pd.read_csv(csv1_path)
df2 = pd.read_csv(csv2_path)

# 关键:多条件左连接,确保匹配列一一对应
# 左表(第一个CSV)的匹配列:SYMBOL, EXPIRY_DT, STRIKE_PR, OPTION_TYP, TIMESTAMP
# 右表(第二个CSV)的匹配列:Symbol, Expiry, Strike Price, Option Type, Date
merged_df = pd.merge(
    df1,
    df2,
    left_on=["SYMBOL", "EXPIRY_DT", "STRIKE_PR", "OPTION_TYP", "TIMESTAMP"],
    right_on=["Symbol", "Expiry", "Strike Price", "Option Type", "Date"],
    how="left"  # 保留df1的所有行,未匹配到的行CLOSE列保持原值
)

# 替换CLOSE列:优先用匹配到的LTP,没有匹配则保留原CLOSE值
merged_df["CLOSE"] = merged_df["LTP"].combine_first(merged_df["CLOSE"])

# 移除合并后产生的多余列(可选,根据需求调整)
columns_to_remove = ["Symbol", "Expiry", "Strike Price", "Option Type", "Date", "LTP"]
merged_df = merged_df.drop(columns=columns_to_remove)

# 保存处理后的结果,不保留索引列
merged_df.to_csv(output_path, index=False)

注意事项

  • 日期格式一致性:如果两个CSV的日期格式不同(比如一个是26-Apr-18,另一个是2018-04-26),需要先统一格式才能正确匹配。可以用pd.to_datetime转换:
    # 转换并统一日期格式为相同字符串
    df1["TIMESTAMP"] = pd.to_datetime(df1["TIMESTAMP"], format="%d-%b-%y").dt.strftime("%d-%b-%y")
    df2["Date"] = pd.to_datetime(df2["Date"], format="%Y-%m-%d").dt.strftime("%d-%b-%y")
    
  • 列名准确性:确保匹配列的名称完全对应(包括大小写、空格),如果有差异可以先修改列名,比如df2.rename(columns={"Symbol": "SYMBOL"}, inplace=True)
  • 未匹配行处理:代码中用combine_first保留了原CLOSE值,如果需要把未匹配的行设为NaN或其他值,可以直接用merged_df["CLOSE"] = merged_df["LTP"]

如果你没有安装pandas,先执行pip install pandas即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:49