【问题标题】:__init__() takes from 1 to 6 positional arguments but 11 were given__init__() 接受 1 到 6 个位置参数,但给出了 11 个
【发布时间】:2019-03-18 23:43:06
【问题描述】:

请帮助noob解决问题。

我有 2 个列表,里面装满了 str 变量:

crops = ['Кук зер', 'Подсол', 'Пшен оз', 'Сах св', 'Соя', 'Ячм оз', 'Ячм яр']

clusters = ['Восток', 'Восток_2', 'Курск', 'Север', 'Центр', 'Юг', 
            'Юг_Краснодар', 'Юг_Ставрополь', 'Агросервис']

然后我想用它们制作一个简单的熊猫数据集:

import pandas as pd
begrow = pd.DataFrame({'Crops': crops},
                       {clusters[0]: [2, 232, 503, 2442, 3858, '#Н/Д', 4706]},
                       {clusters[1]: [10, 259, 773, 2620, 3956, '#Н/Д', 4788]},
                       {clusters[2]: [13, 275, 900, 2754, 3961, '#Н/Д', 4843]},
                       {clusters[3]: [37, 313, 1446, 3085, 4171, '#Н/Д', 5039]},
                       {clusters[4]: [90, 322, 1647, 3207, 4285, '#Н/Д', 5090]},
                       {clusters[5]: [114, 360, 1810, 3293, 4351, '#Н/Д', 5155]},
                       {clusters[6]: [140, '#Н/Д', 2171, 3546, 4472, 4592, '#Н/Д']},
                       {clusters[7]: [187, 489, 2341, 3764, 4582, 4695, '#Н/Д']},
                       {clusters[8]: ['#Н/Д', 230, 490, 2421, 3811, '#Н/Д', 4704]})

print(begrow)

但 Spyder 返回以下错误:

TypeError: __init__() takes from 1 to 6 positional arguments but 11 were given

如何解决?

【问题讨论】:

  • 不清楚你想要的输出是什么,你能举个例子吗?此外,您传递给构造函数的内容毫无意义,请查看documentation
  • 似乎DataFrame 的常用参数是dict。你好像过了 10 岁。你打算做什么?
  • 你需要让他们成为一个dict pd.DataFrame([{...},{...},{...},{...}])的列表

标签: python pandas dataset


【解决方案1】:

错误 __init__() takes from 1 to 6 positional arguments but 11 were given 表示 DataFrame 构造函数最多接受 6 个不同的参数,而您输入了 11 个。

每组{} 在 Python 中创建一个单独的字典,这不是您想要的。如果您删除除初始{ 和结束} 之外的所有{},如下所示:

begrow = pd.DataFrame({'Crops': crops,
                   clusters[0]: [2, 232, 503, 2442, 3858, '#Н/Д', 4706],
                   clusters[1]: [10, 259, 773, 2620, 3956, '#Н/Д', 4788],
                   clusters[2]: [13, 275, 900, 2754, 3961, '#Н/Д', 4843],
                   clusters[3]: [37, 313, 1446, 3085, 4171, '#Н/Д', 5039],
                   clusters[4]: [90, 322, 1647, 3207, 4285, '#Н/Д', 5090],
                   clusters[5]: [114, 360, 1810, 3293, 4351, '#Н/Д', 5155],
                   clusters[6]: [140, '#Н/Д', 2171, 3546, 4472, 4592, '#Н/Д'],
                   clusters[7]: [187, 489, 2341, 3764, 4582, 4695, '#Н/Д'],
                   clusters[8]: ['#Н/Д', 230, 490, 2421, 3811, '#Н/Д', 4704]})

然后它将您的所有数据组合成一个单个 dict 并输出我认为您正在寻找的内容:

print(begrow)

runfile('/home/master/.config/spyder-py3/temp.py', wdir='/home/master/.config/spyder-py3')
 Crops Восток Восток_2 Курск Север Центр    Юг Юг_Краснодар Юг_Ставрополь Агросервис
0  Кук зер      2       10    13    37    90   114          140           187       #Н/Д
1   Подсол    232      259   275   313   322   360         #Н/Д           489        230
2  Пшен оз    503      773   900  1446  1647  1810         2171          2341        490
3   Сах св   2442     2620  2754  3085  3207  3293         3546          3764       2421
4      Соя   3858     3956  3961  4171  4285  4351         4472          4582       3811
5   Ячм оз   #Н/Д     #Н/Д  #Н/Д  #Н/Д  #Н/Д  #Н/Д         4592          4695       #Н/Д
6   Ячм яр   4706     4788  4843  5039  5090  5155         #Н/Д          #Н/Д       4704

【讨论】:

  • 非常感谢!对不起,我还在学习中)
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多