Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将CSV文件导入列表,使用文件名作为标识符_Python_List_Csv_Pandas - Fatal编程技术网

Python 将CSV文件导入列表,使用文件名作为标识符

Python 将CSV文件导入列表,使用文件名作为标识符,python,list,csv,pandas,Python,List,Csv,Pandas,谢谢你帮我澄清我的问题。下面是两组代码 首先从在线数据源中检索数据,在下面的输出示例中添加股票符号作为标识符,“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)

谢谢你帮我澄清我的问题。下面是两组代码

首先从在线数据源中检索数据,在下面的输出示例中添加股票符号作为标识符,“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

您可以在创建列表后添加CSV文件名。 在for循环之后和定义frame之前,将左括号(“[”)替换为所需内容

因此…(注第4行)

我并不是说这是最干净的方式,但它会起作用。我也不确定你说的关于将“[”更改为“{”的内容,但这种更改不是必需的(当然你可以)


祝您好运!

在第一种情况下,您看到的输出是带有字符串键和数据帧值的。一个简单的示例:

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}
[   Column
0       1,    Column
0       1,    Column
0       1]
在第二种情况下,您使用的是。仅供将来参考,不应使用名称
list
,因为它会隐藏内置的列表构造函数

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

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

{'A':    Column
0       1, 'B':    Column
0       1, 'C':    Column
0       1}
[   Column
0       1,    Column
0       1,    Column
0       1]
因此,为了匹配您的第一个案例,您应该为CSV文件使用字典,而不是列表,如下所示:

data={}#注意,我已经将list改为data,并使用了{}而不是[] 对于所有文件中的文件: df=pd.read\u csv(文件,索引\u col=0)
data[file]=df#这里我改变了添加数据的方式

感谢您的回复。例如,“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发布的代码,输出不是包含ins“[”而是在显示列表时显示“[”,因此此方法根本不起作用。