使用numpy repeat创建pandas DataFrame时遇数组长度不匹配错误求助
用Pandas实现类似R中
c()+rep()的多段重复值列 我来帮你搞定这个问题!你在R里用c(rep(0.08, 7), rep(0.06, 6))能轻松生成和date列长度匹配的value列,但转到Pandas时遇到了“arrays must all be same length”的错误,其实问题出在没有正确拼接重复后的数组。
问题根源
你之前的Pandas代码里,大概率是直接把两个np.repeat的结果放在了列表里(比如[np.repeat(0.08,7), np.repeat(0.06,6)]),这会生成一个包含两个子数组的二维结构,而不是Pandas需要的一维数组,所以才会报长度不匹配的错误。
解决方法
这里有两种直观的实现方式,和你R里的写法逻辑完全对应:
方法1:用NumPy拼接重复数组
对应R里c()的操作,我们可以用np.concatenate把两个重复后的一维数组拼在一起:
import numpy as np import pandas as pd # 生成和R中seq.Date一致的日期列(共13个月份) date = pd.date_range('2018-12-01', '2019-12-01', freq='MS') # 拼接两个重复数组,对应R的c(rep(0.08,7), rep(0.06,6)) value = np.concatenate([np.repeat(0.08, 7), np.repeat(0.06, 6)]) df = pd.DataFrame({ 'date': date, 'value': value })
方法2:纯Python列表拼接(更简洁)
如果你不想用NumPy,直接用Python的列表操作就能实现,[x]*n完全等价于R里的rep(x,n),然后用+拼接列表(对应R的c()):
import pandas as pd date = pd.date_range('2018-12-01', '2019-12-01', freq='MS') # 直接拼接重复的列表,写法和R几乎一样 value = [0.08]*7 + [0.06]*6 df = pd.DataFrame({ 'date': date, 'value': value })
两种方法都能生成和你R代码完全一致的DataFrame,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Gaurav Bansal
相关产品推荐
相关产品推荐

