如何在Pandas DataFrame中实现程序化合并及使用Pandas进行回归分析?
Pandas DataFrame程序化合并与回归分析实操指南
一、程序化合并Pandas DataFrame
咱先从DataFrame的程序化合并说起——所谓程序化,核心就是批量、自动化处理多个DataFrame的合并,不用手动逐个操作。这里主要靠两个核心函数:pd.concat()和pd.merge(),分别对应不同场景:
1. 批量合并同结构DataFrame(纵向/横向拼接)
如果你的多个DataFrame列名、数据类型完全一致,直接把它们塞进列表,用pd.concat()一键搞定:
import pandas as pd # 模拟3个同结构的小DataFrame df1 = pd.DataFrame({'date': ['2014-05-01'], 'height_in_cm': [134]}) df2 = pd.DataFrame({'date': ['2014-05-02'], 'height_in_cm': [135]}) df3 = pd.DataFrame({'date': ['2014-05-03'], 'height_in_cm': [135]}) # 程序化合并:列表批量传入,ignore_index重置索引避免重复 df_list = [df1, df2, df3] merged_df = pd.concat(df_list, ignore_index=True) print(merged_df)
要是需要横向拼接(按行索引合并不同列的DataFrame),只需要加个axis=1参数就行。
2. 基于键的程序化合并(类似SQL Join)
如果要按特定列(比如date)合并不同结构的DataFrame(比如一个存身高,一个存体重),可以用pd.merge();如果有多个需要关联的DataFrame,还可以循环执行合并:
# 模拟体重数据的DataFrame weight_df = pd.DataFrame({'date': ['2014-05-01', '2014-05-02', '2014-05-03'], 'weight_in_kg': [30, 31, 31]}) # 按date列内连接,要是有更多df可以用循环逐个merge final_df = pd.merge(merged_df, weight_df, on='date', how='inner') print(final_df)
这里的how参数和SQL逻辑一致:inner取交集、left保留左表所有行、right保留右表所有行、outer取并集。
二、用Pandas做回归分析(基于你的示例数据)
你的示例是日期与身高的时间序列数据,刚好可以用线性回归分析身高随时间的增长趋势,步骤如下:
1. 数据预处理
首先把date转成datetime格式,再计算从第一天开始的天数作为自变量(回归模型需要数值型特征,日期不能直接用):
from datetime import datetime import pandas as pd # 补全示例数据的缺失部分(保持身高连续增长趋势) data = { 'date': ['2014-05-01', '2014-05-02', '2014-05-03', '2014-05-04', '2014-05-05', '2014-05-06', '2014-05-07', '2014-05-08', '2014-05-09', '2014-05-10', '2014-05-11', '2014-05-12', '2014-05-13', '2014-05-14', '2014-05-15', '2014-05-16', '2014-05-17', '2014-05-18', '2014-05-19', '2014-05-20'], 'height_in_cm': [134, 135, 135, 137, 138, 140, 140, 141, 142, 143, 143, 144, 145, 146, 147, 148, 149, 150, 150, 151] } df = pd.DataFrame(data) # 转换日期格式 df['date'] = pd.to_datetime(df['date']) # 计算距第一天的天数,作为回归的自变量x df['days_since_start'] = (df['date'] - df['date'].min()).dt.days print(df.head())
2. 构建并拟合线性回归模型
这里用statsmodels库和Pandas配合(它能输出更详细的统计指标,适合分析):
import statsmodels.api as sm # 给自变量加上常数项(对应回归的截距) X = sm.add_constant(df['days_since_start']) y = df['height_in_cm'] # 构建普通最小二乘模型并拟合 model = sm.OLS(y, X).fit() # 输出完整回归结果 print(model.summary())
3. 关键结果解读
从输出的summary()里,重点看这几个指标:
- R-squared:越接近1说明模型拟合效果越好,这里因为身高是稳定增长的,R²应该接近1
- coef(系数):
days_since_start的系数就是日均身高增长量,比如系数0.8就代表平均每天长0.8cm - P值:如果P值小于0.05,说明“天数”这个自变量对身高有显著影响
4. 预测(可选)
用拟合好的模型可以预测未来身高,比如预测第21天的身高:
# 构造预测数据:第21天对应days_since_start=20 pred_X = sm.add_constant(pd.Series([20], name='days_since_start')) pred_height = model.predict(pred_X) print(f"预测第21天的身高:{pred_height.values[0]:.2f} cm")
内容的提问来源于stack exchange,提问作者Xingfang Lee
相关产品推荐
相关产品推荐

