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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:58:11