【问题标题】:Pandas: "ValueError: Buffer has wrong number of dimensions (expected 1, got 0)Pandas:“ValueError:缓冲区的维数错误(预期为 1,得到 0)
【发布时间】:2017-11-10 22:50:33
【问题描述】:

我正在尝试根据现有列的算术在数据框中创建新列。以下工作正常:

df_2016 = pd.DataFrame(np.random.rand(10,1), columns=['current'])
df_future = pd.DataFrame(columns={'2017e', '2018e'})
i = 1
inflation = 0.02
for column in df_future:
   df_future[column] = df_2016 *(1+inflation)**i
   i = i + 1

但是当我尝试创建更长的列序列时:

df_future2 = 'bl2021 bl2022 bl2023 bl2024 bl2025 bl2026 bl2027 bl2028 bl2029 bl2030 bl2031 bl2032 bl2033 bl2034 bl2035 bl2036 bl2037 bl2038 bl2038 \
    bl2039 bl2040 bl2041 bl2042 bl2043 bl2044 bl2045 bl2046 bl2047 bl2048 bl2049 bl2050'
df_future2 = df_future2.split()
df_future2 = pd.DataFrame(columns=df_future2)
for column in df_future2:
  df_future2[column] = df_2016 * (1 + inflation) ** i
  i = i + 1

我明白了:

ValueError: Buffer has wrong number of dimensions (expected 1, got 0)

我不明白。有什么聪明的想法吗?

【问题讨论】:

  • 你在df_future2里面放了什么数据吗?
  • 不,我没有。马丁在下面的回答解决了它。

标签: python python-3.x pandas


【解决方案1】:

您不必预先分配数据框。只需随时添加列:

future2 = 'bl2021 bl2022 bl2023 bl2024 bl2025 bl2026 bl2027 bl2028 bl2029 bl2030 bl2031 bl2032 bl2033 bl2034 bl2035 bl2036 bl2037 bl2038 bl2038 \
    bl2039 bl2040 bl2041 bl2042 bl2043 bl2044 bl2045 bl2046 bl2047 bl2048 bl2049 bl2050'
column_names = future2.split()
df_future2 = pd.DataFrame()
for column in column_names:
  df_future2[column] = df_2016 * (1 + inflation) ** i
  i = i + 1

【讨论】:

  • 像魅力一样工作!谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2018-03-19
  • 2015-01-19
  • 2011-12-28
相关资源
最近更新 更多