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

Python中如何将部分列转为对数形式并创建新DataFrame

解决Pandas创建含对数列新DataFrame的问题

原数据集

year      gnp   labor   capital
0   1955    114043  8310    182113
1   1956    120410  8529    193745
2   1957    129187  8738    205192
3   1958    134705  8952    215130

错误原因

你之前使用pd.DataFrame('year', 'ln_gnp', ' ln_labor', 'ln_capital')的写法不符合Pandas参数要求——pd.DataFrame()需要接收字典、列表、数组等可迭代结构作为输入,直接传入字符串会导致初始化失败。

正确解决方案

方法1:基于已生成的Series构造字典

如果你已经单独计算出三个对数Series,可通过字典将它们与原year列组合成新DataFrame:

import pandas as pd
import numpy as np

# 假设原DataFrame命名为df
ln_gnp = np.log(df.gnp)
ln_labor = np.log(df.labor)
ln_capital = np.log(df.capital)

# 构造新DataFrame
new_df = pd.DataFrame({
    'year': df['year'],
    'ln_gnp': ln_gnp,
    'ln_labor': ln_labor,
    'ln_capital': ln_capital
})

方法2:基于原DataFrame直接扩展(更简洁)

无需单独生成Series,直接在原DataFrame上计算对数列,再筛选目标列:

new_df = df.copy()
# 添加对数列
new_df['ln_gnp'] = np.log(new_df['gnp'])
new_df['ln_labor'] = np.log(new_df['labor'])
new_df['ln_capital'] = np.log(new_df['capital'])
# 保留需要的列
new_df = new_df[['year', 'ln_gnp', 'ln_labor', 'ln_capital']]

方法3:使用assign批量处理(更优雅)

通过assign方法一次性添加所有对数列,再直接筛选目标列:

new_df = df.assign(
    ln_gnp=np.log(df['gnp']),
    ln_labor=np.log(df['labor']),
    ln_capital=np.log(df['capital'])
)[['year', 'ln_gnp', 'ln_labor', 'ln_capital']]

验证结果

运行上述任意方法后,new_df的输出如下:

year     ln_gnp  ln_labor  ln_capital
0   1955  11.645379  9.023866   12.110384
1   1956  11.698230  9.052073   12.173250
2   1957  11.768338  9.078652   12.230624
3   1958  11.809347  9.104045   12.275332

内容的提问来源于stack exchange,提问作者limbalu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:20:45