如何在Python中从零创建DataFrame并添加自定义变量?
正确创建包含伯努利和正态分布变量的DataFrame方法
你的代码存在三个关键问题,导致无法得到预期的DataFrame:
- 缺失必要导入:生成正态分布的
norm没有从scipy.stats模块导入,运行时会抛出名称错误 - reshape参数错误:
reshape(-100, 1)是无效语法,要将一维数组转为列向量,应该用reshape(-1, 1),其中-1表示让系统根据数组元素数量自动计算行数 - DataFrame赋值逻辑错误:
df.assign()方法不会修改原DataFrame,而是返回一个包含新列的新DataFrame,你没有将这个新对象赋值给df,所以原df始终是空的
修正后的完整代码
# 导入所有需要的模块 from scipy.stats import bernoulli, norm import pandas as pd # 生成伯努利分布变量x并转为列向量 x = bernoulli.rvs(size=100, p=0.6) x = x.reshape(-1, 1) # 生成正态分布变量y并转为列向量 y = norm.rvs(size=100, loc=0, scale=1) y = y.reshape(-1, 1) # 方法1:直接在创建DataFrame时传入数据(推荐) df = pd.DataFrame({'x': x.flatten(), 'y': y.flatten()}) print(df) # 方法2:使用assign并重新赋值给df # df = pd.DataFrame() # df = df.assign(x=x.flatten(), y=y.flatten()) # print(df)
补充说明
reshape(-1,1)得到的是二维数组,直接传入DataFrame会被识别为嵌套结构,用flatten()转为一维数组更稳妥;也可以用pd.Series(x.squeeze(), name='x')完成二维到一维的转换- 直接在
pd.DataFrame()构造函数中传入字典的方式,代码更简洁直观,是日常开发的首选写法
内容的提问来源于stack exchange,提问作者TFT
相关产品推荐
相关产品推荐

