Pandas合并两个DataFrame仅返回单条数据该如何解决?
合并DataFrame仅返回单条数据的诱因与解决方案
问题诱因
- 合并规则默认值问题:
pd.merge()默认采用*内连接(inner join)*逻辑,仅保留两个DataFrame中Ticker列取值完全一致的行,不匹配的行直接被过滤。 Ticker列内容存在隐形差异:这是该场景下最核心的诱因,常见差异包括两类:- 隐形空白符:从CSV读取的
df中Ticker列可能存在前后空格、换行符等不可见字符,比如'AAPL '(末尾带空格)会被判定为与df1中的'AAPL'不同。 - 大小写不匹配:如果CSV中存储的股票代码为小写(
'aapl')或首字母大写('Aapl'),会与df1中拉取到的全大写代码匹配失败。
- 隐形空白符:从CSV读取的
- 拉取数据异常:若调用
si.get_live_price()时AAPL、MSFT的接口请求失败,会导致df1本身就仅存在TSLA一行数据,合并后自然只有一条结果。
解决方法
- 先验证
df1数据完整性:执行print(df1)确认三行股票数据均正常生成,排除接口拉取异常问题。 - 统一清洗
Ticker列消除匹配差异:# 去除两表Ticker列的前后空白符,统一转为大写 df['Ticker'] = df['Ticker'].str.strip().str.upper() df1['Ticker'] = df1['Ticker'].str.strip().str.upper() - 调整合并规则便于排查问题:如果需要保留所有原始记录,可将合并方式改为外连接,快速定位匹配失败的行:
# 外连接合并,未匹配到的字段会填充为NaN combine = pd.merge(df, df1, on='Ticker', how='outer') # 筛选存在缺失值的行,即可查看哪些代码匹配失败 print(combine[combine.isna().any(axis=1)]) - 可选代码规范优化:修正现有字典生成式的变量重名问题(当前不影响运行,但存在隐性风险):
# 原写法循环变量与外层列表同名,调整为独立变量名 price_data = {ticker: si.get_live_price(ticker) for ticker in tickers}
内容的提问来源于stack exchange,提问作者FLIMPROJECT
相关产品推荐
相关产品推荐

