我正在从以下内容构建 Dataframe :
datetoday = (pd.to_datetime(files[-1]['file_published'], format='%d.%m.%Y %H:%M')).strftime('%Y-%m-%d')
datetoday
Out[66]: '2022-11-23'
dates = pd.Series(np.arange(1, 337, 1))
dates
Out[68]:
0 1
1 2
2 3
3 4
4 5
...
331 332
332 333
333 334
334 335
335 336
Length: 336, dtype: int64
然后添加一个数据列:
data = pd.read_excel(files[0]['file_path'], sheet_name='Sheet1', engine='openpyxl').iloc[1:, 3:].astype(
float).dropna(axis=1).values.flatten()
len(data)
Out[73]: 336
但是当我创建最终的 Dataframe 时:
df = pd.DataFrame({'datecreated': datetoday, 'timestamp': dates, 'ipto_weekly_forecast': data})
出现以下错误:
ValueError: array length 0 does not match index length 336
奇怪的是,错误发生在Jupyter上,但在PyCharm本地,df
的构建没有问题。
我该如何解决这个问题?
1条答案
按热度按时间x33g5p2x1#
猜想
您在Jupyter上使用的旧版本的panda对使用标量值指定
datecreated
列的方式很挑剔(注意,对于其他两列,您使用列表/数组指定)。溶液
以下修复程序适用于任何版本的panda(假定
dates
和data
列表的长度实际上为336):以下是使用模拟数据的示例。
说明
这个解决方案是可行的,因为表达式
[datetoday]*336
的计算结果是一个长度为336的列表,其中每个值都等于datetoday
。注:我打算以更简洁的格式提供这些信息作为评论,但我没有足够的声誉发表评论。