使用python将Excel数据导入类实例

时间:2019-03-12 02:47:33

标签: python excel

我正在尝试将数据从Excel工作表导入到RPG游戏的类实例列表中。目前,我正在尝试使用Pandas,这是我一直在使用的代码:python 3.7.2

import pandas as pd


class potion(object):

    def __init__(self, name, types, effects, value, weight):
        self.name = name
        self.types = types
        self.effects = effects
        self.value = value
        self.weight = weight

df = pd.read_excel('Data/potions.xlsx', sheet_name='None')

potions = df.values.tolist()

print(potions)

,输出为:

[['Crude Hp Potion', 'Hp Potion', 10, 10, 0.5], ['Hp Potion', 'Hp Potion', 
   25, 50, 1.0], ...]

我正在寻找的示例是要存储的数据,如下所示,因此每一行都是其自己的实例列表索引:

potions = [potion('Crude Hp Potion', 'Hp Potion', 10, 10, 0.5),
           potion('Hp Potion', ' hp Potion', 25, 50, 1.0)]

实现我的尝试:

for i in potions[0]:
    potions.append([potion(i)])

print(potions[0].name)

并且给了我:

TypeError: __init__() missing 4 required positional arguments: 'types', 'effects', 'value', and 'weight'

我正在使用的excel工作表上的数据如下:

                 Name       Type  Effect  Price  Weight
0     Crude Hp Potion  Hp Potion      10     10     0.5
1           Hp Potion  Hp Potion      25     50     1.0
2  Superior Hp Potion  Hp Potion      50    100     1.5
3     Crude Mp Potion  Mp Potion       5      5     0.5
4           Mp Potion  Mp Potion      15     50     1.0
5  Superior Mp Potion  Mp Potion      30    100     1.5

我不确定自己想念的是什么,并且希望得到帮助,我似乎找不到任何地方可以解释如何做。 谢谢。

1 个答案:

答案 0 :(得分:2)

您非常接近,您只需解压缩potion列表中列表中的所有值即可。可以使用星号(*)。这样,您的药水对象将被称为potion(arg1, arg2, arg3, arg4, arg5),这是正确的,而不是potion([arg1, arg2, arg3, arg4, arg5]),这会引起您发现的错误(因为列表代表单个对象)。

以下代码对此进行了纠正:

class Potion(object): 
def __init__(self, name, types, effects, value, weight):
    self.name = name
    self.types = types
    self.effects = effects
    self.value = value
    self.weight = weight 

df = pd.read_excel('Data/potions.xlsx', sheet_name='None') 

potions = df.values.tolist()
potion_instances = []
for p in potions:
    potion_instances.append(Potion(*p))

我随意修改了您的结构。首先,为您的对象赋予更有意义的名称,以免引起混淆-potionpotions非常接近,按照惯例,Python类始终以CamelCase编写。另外,遍历列表potions并将每个创建的Potion对象附加到新列表(我命名为potion_instances)中更有意义。这样,您可以将原始数据和代码对象彼此分开。