如何将两个键不同的Pandas Series合并为一个Pandas DataFrame
合并索引不同的Pandas Series为指定列名的DataFrame并丢弃索引
问题代码
from datetime import datetime, timedelta import pandas as pd now= datetime.now() time1= pd.Timestamp(now.year, now.month, now.day)- timedelta(days=1) time2= pd.Timestamp(now.year, now.month, now.day)- timedelta(days=2) data1= {time1:1} data2= {time2:2} series1 =pd.Series(data1) series2 =pd.Series(data2) print(series1) print(series2) merged= pd.DataFrame() merged= pd.concat(series1,series2) print(merged)
问题需求
两个Pandas Series的索引(日期)不同,要合并成一个DataFrame,最终结果要有column1和column2两列,只保留Series里的数值1和2,完全去掉原有的日期索引。之前用pd.concat合并没得到预期结果。
解决方案
方法1:直接提取值构造DataFrame(适合单值Series)
既然每个Series里只有一个值,直接把值取出来构造DataFrame就行,完全不用管原索引:
# 提取Series中的数值 val1 = series1.iloc[0] val2 = series2.iloc[0] # 生成目标DataFrame merged = pd.DataFrame({'column1': [val1], 'column2': [val2]}) print(merged)
输出结果:
column1 column2 0 1 2
方法2:重置索引后合并(适合多值Series)
如果你的Series可能有多个数值,先把原日期索引去掉,再合并成列:
# 重置索引丢弃日期,同时给列重命名 series1_reset = series1.reset_index(drop=True).rename('column1') series2_reset = series2.reset_index(drop=True).rename('column2') # 按列合并成DataFrame merged = pd.concat([series1_reset, series2_reset], axis=1) print(merged)
输出结果和上面一致,也能满足需求。
原代码出错原因
你之前写的pd.concat(series1, series2)是用法错误,pd.concat要求第一个参数是序列(比如把两个Series放进列表),就算改成pd.concat([series1, series2]),因为两个Series索引不一样,合并后会出现NaN值,而且是按行堆叠,不是分成两列,还带着原日期索引,完全不符合你的需求。
内容的提问来源于stack exchange,提问作者daniel stafford
相关产品推荐
相关产品推荐

