Python合并货币DataFrame遇NaN异常,求正确合并方案
解决DataFrame合并时列错位/NaN的问题
问题根源
你遇到的问题主要来自两个细节:
- 用
df + df2运算时,两个DataFrame的列名完全不重合(一个是AUD,一个是BRL),Pandas无法找到对应列做数值运算,因此所有结果返回NaN。 - 使用
pd.concat([df,df2])时,默认是按行拼接(axis=0),两个DataFrame会上下堆叠,自然出现列错位、单侧NaN的情况。
另外需要注意:你的JSON数据里的货币值是字符串类型,后续如果要做运算,得先转成数值格式(比如float),避免出现类型错误。
解决方案
步骤1:加载数据并转换数值类型
先把JSON中的字符串值转为float,为后续合并和运算打好基础:
import json import pandas as pd # 处理AUD数据 with open('AUD.json') as f: AUD_data = json.load(f) df_aud = pd.DataFrame.from_dict(AUD_data).astype(float) # 处理BRL数据 with open("BRL.json") as f: BRL_data = json.load(f) df_brl = pd.DataFrame.from_dict(BRL_data).astype(float)
步骤2:按列合并DataFrame
使用pd.concat时指定axis=1,让两个DataFrame按相同索引把列合并到同一行:
df_combined = pd.concat([df_aud, df_brl], axis=1) print(df_combined.head())
执行后就能得到你期望的输出:
AUD BRL 0 2.8681 1.1607 1 2.8667 1.1645 2 2.8679 1.1634 ...
额外处理(可选)
如果两个DataFrame的索引长度不一致,合并后较短的部分会出现NaN,你可以根据需求调整:
- 只保留索引完全匹配的行:
df_combined_inner = pd.concat([df_aud, df_brl], axis=1, join='inner') - 用指定值填充缺失值:
df_combined_fill = pd.concat([df_aud, df_brl], axis=1).fillna(0)
内容的提问来源于stack exchange,提问作者Michał Śmieszek
相关产品推荐
相关产品推荐

