【问题标题】:How do I add values from a csv file to a list?如何将 csv 文件中的值添加到列表中?
【发布时间】:2020-07-22 20:42:18
【问题描述】:
x,y
6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505

如何将 x 的每个值放在一个列表中,并且将 y 值相同? 我基本上是在尝试创建一个情节。

【问题讨论】:

  • 你试过什么?如果您不确定如何执行此操作,我想我会等到您获得更多经验后再尝试 ML...

标签: python csv matplotlib plot


【解决方案1】:

你可以这样做:

import csv
from collections import defaultdict

columns = defaultdict(list)
with open("my.csv") as fin:
    dr = csv.DictReader(fin)
    for row in dr:
        for key, val in row.items():
            columns[key].append(float(val))

print(columns["x"])
print(columns["y"])

给予:

[6.1101, 5.5277, 8.5186, 7.0032, 5.8598, 8.3829, 7.4764, 8.5781, 6.4862, 5.0546, 5.7107]
[17.592, 9.1302, 13.662, 11.854, 6.8233, 11.886, 4.3483, 12.0, 6.5987, 3.8166, 3.2522]

显然,这是假设内容将是需要转换为 float 的数字数据(因为问题表明您正在尝试创建绘图)。如果有非数字值,这将引发ValueError,因此如果可能是这种情况,那么您需要对此进行测试或处理异常。

【讨论】:

  • @SuperStew 只是因为它会为您处理标题行。
  • 啊,好方便
【解决方案2】:

使用pandas

import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)

【讨论】:

  • 技术上OP要求列表
  • @SuperStew OP:so I can use it for machine learning
  • 仅仅因为 op 想要将其用于“机器学习”并不意味着您应该假设他想要使用 pandas。 OP 要求将他的数据放在一个列表中,而您却给了他一个数据框。
  • @JacekRojek 是的,但那是他的问题
【解决方案3】:

使用pandas,下面是一个示例。


import pandas as pd

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

x = df.x.tolist()
y = df.y.tolist()

xy 变量将分别包含CSVxy 列中的值作为列表。

【讨论】:

    【解决方案4】:

    您可以使用pandas 来执行此操作:

    import pandas as pd
    
    df = pd.read_csv('cord.csv', sep=',')
    
    x = df['x'].tolist()
    y = df['y'].tolist()
    

    输出:

    [6.1101, 5.5277, 8.5186, 7.0032, 5.8598, 8.3829, 7.4764, 8.5781, 6.4862, 5.0546, 5.7107, 14.164]
    [17.592, 9.1302, 13.662, 11.854, 6.8233, 11.886, 4.3483, 12.0, 6.5987, 3.8166, 3.2522, 15.505]
    

    【讨论】:

      【解决方案5】:

      将熊猫导入为 pd

      df = pd.read_csv('data.csv', header = None)

      打印(类型(df.columns))

      打印(类型(df.index))

      那么一旦你知道了数据集的默认类型,你就可以使用 df.columns.tolist()

      df.index.tolist()

      打印(类型(data.columns.tolist())) 打印(类型(data.index.tolist()))

      【讨论】:

        【解决方案6】:

        简单的方法是使用 csv 模块功能。 首先创建一个csv阅读器函数:

        import csv
        
        def csv_dict_reader(file, has_header=False, skip_comment_char=None, **kwargs):
            """
            Reads CSV file into memory
        
        
            :param file: (str) path to csv file to read
            :param has_header: (bool) skip first line
            :param skip_comment_char: (str) optional character which, if found on first row, will skip row
            :param delimiter: (char) CSV delimiter char
            :param fieldnames: (list) CSV field names for dictionnary creation
            :param kwargs:
            :return: csv object that can be iterated
            """
            with open(file) as fp:
                csv_data = csv.DictReader(fp, **kwargs)
                # Skip header
                if has_header:
                    next(csv_data)
        
                fieldnames = kwargs.get('fieldnames')
                for row in csv_data:
                    # Skip commented out entries
                    if fieldnames is not None:
                        if skip_comment_char is not None:
                            if not row[fieldnames[0]].startswith(skip_comment_char):
                                yield row
                        else:
                            yield row
                    else:
                        # list(row)[0] is key from row, works with Python 3.7+
                        if skip_comment_char is not None:
                            if not row[list(row)[0]].startswith(skip_comment_char):
                                yield row
                        else:
                        yield row
        

        上面的函数返回一个可以迭代的生成器,如果你的 csv 文件非常大,这很有用,所以它不能立即放入内存中。 然后使用该函数读取数据并遍历值

        fieldnames = ('x', 'y')
        data = csv_dict_reader('/path/to/my/file')
        x_list = []
        y_list = []
        for row in data:
            x_list.append(row['x'])
            y_list.append(row['y'])
        

        顺便说一句,也许使用两个单独的列表并不是最优化的方式。 您可以删除这两个列表,直接使用row['x']

        【讨论】:

        • 列表没有 add 方法 - 你的意思是 append
        • @alaniwi 谢谢,当您在晚上 11 点发表评论时会发生这种情况;)
        猜你喜欢
        • 1970-01-01
        • 2015-11-29
        • 2018-07-26
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        相关资源
        最近更新 更多