【问题标题】:Import CSV file to List, use file name as identifier将 CSV 文件导入 List,使用文件名作为标识符
【发布时间】:2015-03-05 13:22:54
【问题描述】:

也感谢您帮助我澄清我的问题。下面有两组代码。

首先从在线数据源中检索数据,添加股票代码作为标识符,在下面的输出示例中为“AA”,并使用下载的数据创建列表,完美运行。

stocks = ['AA', 'AAPL', 'IBM']
start = datetime(1990, 1, 1)
end = datetime.today()

data = {}
for stock in stocks:
print stock
stkd = DataReader(stock, 'yahoo', start, end).sort_index()
data[stock] = stkd

Output:  
**{'AA':**     OPEN HIGH LOW CLOSE VOLUME
Date
1990-01-02  75.00  75.62  74.25  75.62   4039200    
1990-01-03  76.00  76.75  76.00  76.75   7332000       

第二次读取 CSV 文件并创建列表,很好,目标是添加标识符(使用 CSV 文件名),类似于上面的代码,因为导入数据并创建列表。

CSV 读取代码。

path =r'C:\Users\Data'
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list = []
for file in allFiles:
    df = pd.read_csv(file, index_col=0)
    list.append(df)
frame = pd.concat(list)

Current Output:

[             Time    Open    High     Low   Close     Vol      OI
 Date                                                             
 12/17/1984  11:15  817.75  820.25  817.00  820.25   73445  309260
 12/18/1984  11:15  820.25  821.00  818.50  819.25   87505  308240

Desired Output:

 {'XX':        Time    Open    High     Low   Close     Vol      OI
 Date                                                             
 12/17/1984  11:15  817.75  820.25  817.00  820.25   73445  309260
 12/18/1984  11:15  820.25  821.00  818.50  819.25   87505  308240

想读取 XX.csv,为传入值制作 XX 标识符,然后将 YY.csv、GG.CSV 重复处理到一个组合列表或面板中。

尝试了几件事,但运气不佳,我是 python 新手,但由于 Stackoverflow 和类似网站,我相处得很好。

CSV 文件格式

Date,Time,Open,High,Low,Close,Vol,OI
12/17/1984,11:15,817.75,820.25,817,820.25,73445,309260
12/18/1984,11:15,820.25,821,818.5,819.25,87505,308240

【问题讨论】:

    标签: python list csv pandas


    【解决方案1】:

    您可以在创建列表后添加 CSV 文件名。 在 for 循环之后和定义框架之前,将左括号 ('[') 替换为您想要的任何内容。

    所以...(注意第 4 行)

    for file in allFiles:
        df = pd.read_csv(file, index_col=0)
        list.append(df)
    list[0].replace("[", "**{'XX':**")
    frame = pd.concat(list)
    

    我并不是说这是最干净的方法,但它会起作用。我也不确定您所说的将 '[' 更改为 '{' 但不需要更改(您当然可以)。

    祝你好运!

    【讨论】:

    • 感谢您的回复。例如,“XX”是 CSV 文件名 (XX.csv),以及其他几个文件,例如 YY.csv、GG.csv 等...
    • 感谢您的回复。例如,“XX”是 CSV 文件名 (XX.csv),以及其他几个文件,比如 YY.csv、GG.csv 等……想读取 XX.csv,为传入值创建 XX 标识符,然后将 YY.csv、GG.CSV 重复处理到一个组合列表或面板中。也感谢您帮助我澄清我的问题。
    • @Benji 如果您仔细查看 OP 发布的代码,输出不是包含“[”的字符串,而是在显示列表时显示“[”,因此此方法将根本不工作。
    【解决方案2】:

    您在第一种情况下看到的输出是带有字符串键和 DataFrame 值的dictionary。一个最小的例子:

    import pandas
    
    data = {}
    for key in ['A', 'B', 'C']:
        data[key] = pandas.DataFrame({'Column': [1]})
    print data
    

    输出:

    {'A':    Column
    0       1, 'B':    Column
    0       1, 'C':    Column
    0       1}
    

    在第二种情况下,您使用的是list。仅供将来参考,您不应使用名称 list,因为它会影响内置列表构造函数。

    我之前的例子可以用列表重做:

    data = []
    for key in ['A', 'B', 'C']:
        data.append(pandas.DataFrame({'Column': [1]}))
    print data
    

    输出:

    [   Column
    0       1,    Column
    0       1,    Column
    0       1]
    

    因此,为了匹配您的第一个案例,您应该为 CSV 文件使用字典而不是列表,如下所示:

    data = {} # 注意我已将列表更改为数据,并使用 {} 而不是 [] 对于 allFiles 中的文件: df = pd.read_csv(文件,index_col=0) data[file] = df # 这里我改变了添加数据的方式

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 2023-02-05
      • 2013-08-21
      • 2019-04-16
      • 2017-11-24
      • 2020-03-02
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多