【问题标题】:Append to a 2 dimensional array with mixed while reading a csv file in python在 python 中读取 csv 文件时附加到混合的二维数组
【发布时间】:2018-12-31 20:04:14
【问题描述】:

我有一个逗号分隔的 csv 文件“Brent 3.csv”: 行如下所示:

2014.03.12 23:59:59,2014.03.20 23:59:59,BRENTSPOT,Brent 
1,1.29,1.6,0.8568833439015613,91.09,3.5,2.053,-0.035\n

2014.04.01 23:59:59,2014.04.02 23:59:59,BRENTSPOT,Brent 
1,1.39,1.4,0.8568833439015613,89.59999999999999,3.5,2.053,-0.036\n

现在我想做的是创建一个包含字符串和浮点值的二维混合列表。

import os

def create_list(stratname,directory):
    os.chdir(directory)
    temp = []

    for file in glob.glob("*.csv"):
        if stratname in file:
            TDFile=open(file,"r")

            for i,line in enumerate(TDFile):
                s = line.split(',')
                for x in s:   
                    try:
                        temp.append(float(x))
                    except ValueError:
                        temp.append(x)
    return temp


brent3 = create_list("Brent 3",strategydir)

print(brent3)

我知道我应该使用

temp.append([float(x)])

但这只会创建一个看起来像这样的列表:

['2014.03.12 23:59:59', '2014.03.20 23:59:59', 'BRENTSPOT', 'Brent 1', [1.29], [1.6], [0.8568833439015613], [91.09], [3.5], [2.053], [-0.035], '2014.04.01 23:59:59',    ...   ]

应该是:

[['2014.03.12 23:59:59', '2014.03.20 23:59:59', 'BRENTSPOT', 'Brent 1', 1.29, 1.6, 0.8568833439015613, 91.09, 3.5, 2.053, -0.035], ['2014.04.01 23:59:59', .....]]

我似乎无法找到答案如何以 [[first line],[second line]] 格式获取 csv 文件的每一行。

任何帮助表示赞赏:)

【问题讨论】:

    标签: python list csv multidimensional-array append


    【解决方案1】:
    def create_list(stratname,directory):
        os.chdir(directory)
        temp = []
        fin = []
    
        for file in glob.glob("*.csv"): # search file
            if stratname in file:
                TDFile=open(file,"r")
    
                for line in TDFile: # go throug every line in file
                    temp = []
                    s = line.split(',')
                    for x in s:
                        try:
                            temp.append(round(float(x),3))
                        except ValueError:
                            temp.append(x)
                    fin.append(temp)
        return fin
    

    这解决了问题。我添加了另一个数组 fin = [],我将临时值附加到每一行并再次清空 temp = [] 中的值以用于文件中的下一行。

    【讨论】:

      【解决方案2】:

      为什么不使用pandas

      import io
      import pandas as pd
      
      csv = """2014.03.12 23:59:59,2014.03.20 23:59:59,BRENTSPOT,Brent 1,1.29,1.6,0.8568833439015613,91.09,3.5,2.053,-0.035\n
      2014.04.01 23:59:59,2014.04.02 23:59:59,BRENTSPOT,Brent 1,1.39,1.4,0.8568833439015613,89.59999999999999,3.5,2.053,-0.036\n"""
      
      print(pd.read_csv(io.StringIO(csv), header=None).values.tolist())
      

      产生

      [['2014.03.12 23:59:59', '2014.03.20 23:59:59', 'BRENTSPOT', 'Brent 1', 1.29, 1.6, 0.8568833439015613, 91.09, 3.5, 2.053, -0.035],
       ['2014.04.01 23:59:59', '2014.04.02 23:59:59', 'BRENTSPOT', 'Brent 1', 1.39, 1.4, 0.8568833439015613, 89.59999999999998, 3.5, 2.053, -0.036000000000000004]]
      

      如果您想使用您的文件 Brent 3.csv,请将对 io.StringIO 的调用替换为文件的路径。

      【讨论】:

      • 通过将 csv 替换为文件的目录,现在我得到 [[...\\Strategy Returns\\Brent 3.csv']] 作为返回。使用 pd.read_csv(io.StringIO(csv), header=None).values.tolist()
      • 不要将csvio.StringIO(csv) 替换为您的路径作为字符串。 io.StringIO(csv) 使 csv 被视为磁盘上的 .csv 文件。
      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2016-05-22
      • 1970-01-01
      • 2012-05-21
      • 2014-09-13
      • 1970-01-01
      相关资源
      最近更新 更多