使用循环将 CSV 数据提取到对象中

Posted

技术标签:

【中文标题】使用循环将 CSV 数据提取到对象中【英文标题】:Using a Loop to extract CSV data into an object 【发布时间】:2019-08-07 09:41:58 【问题描述】:

我的问题很难解释,我不确定是否可以按照我的要求做,但我会尽力解释。

基本上,我有一个包含数据的 CSV 文件,我想提取特定的单元格并将它们设置为对象中的值。 CSV 中的每一行都包含有关单个项目的信息。目前,我使用 pandas 库和 df.iloc[0][1] 等对其进行了硬编码。但是,我希望能够遍历整个 CSV 并提取单个单元格并将它们添加到多个对象中,所以我不必手动硬编码每一行。

希望代码能帮助说明我的意思:

df = pd.read_csv('Options.csv')

我的班级:

    class Option:
    def __init__(self, type, name, S, K):

        self.type = type
        self.name = name
        self.S = S
        self.K = K 

当前从 CSV 中提取:

o1 = Option(df.iloc[0, 1], df.iloc[0][2], df.iloc[0][3], df.iloc[0][4])
o2 = Option(df.iloc[1, 1], df.iloc[1][2], df.iloc[1][3], df.iloc[1][4])

等等

我仍然希望能够为每个选项选择单独的值,例如 print(o1.name)、o6.type 等。

【问题讨论】:

【参考方案1】:

您需要遍历文档中从 0 到最大行数的每一行。对于每次迭代,您都会创建一个 Option 类的新实例。

下面是一些示例代码:

df = pd.read_csv('Option.csv')

row_amount = 5 # put the amount of rows that the csv file contains here or get it with pandas 

options = []

for row in range(0, row_amount):
    option = Option(df.iloc[row, 1], df.iloc[row, 2], df.iloc[row, 3], df.iloc[row, 4])
    options.append(option)

【讨论】:

是否可以使用此代码选择单个选项。例如:打印(o1.type) 是的,当然,您可以使用以下语法选择选项列表的任何元素:options[x]。这意味着您可以使用以下行打印第一行的类型: print(options[1].type) 好的,谢谢,这是有道理的。最后一个问题,我如何遍历选项列表,以允许我执行班级中的方法。我尝试了一个 for 循环,但一直出错。 刚刚弄明白了!【参考方案2】:

这将为您提供选项对​​象的列表:

options = df.apply(lambda x: Option(x[1], x[2], x[3], x[4]), axis=1)

options_list = options.values.tolist()

【讨论】:

以上是关于使用循环将 CSV 数据提取到对象中的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 Plotly Dash 存储到外部对象

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

ssis 中的表达式不支持对象变量的数据类型

按名称从字典中提取数据框

使用循环进行 Web 抓取并写入 csv

使用for循环从数组迭代到列表