这是我的代码:
import pandas as pd
import os, glob
from pandas import Panel
import sqlite3
my_dir = '/home/manish/Desktop/Equity/'
filelist = []
fileList = []
os.chdir(my_dir)
for files in glob.glob('*.txt'):
p = pd.read_csv(files, names = ['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume', 'Null'])
del p['Null']
print p
p.to_csv('monthly.csv', sep = ',')
#Even this does not work
#p.to_csv('monthly.csv', sep = ',')
我的问题是数据是否正确打印到屏幕上,但是当我将其保存到csv时,它只保存1天的数据。
答案 0 :(得分:2)
你应该这样做:
my_dir = '/home/manish/Desktop/Equity/'
filelist = []
os.chdir(my_dir)
dfs = []
for files in glob.glob('*.txt'):
dfs.append(pd.read_csv(files, names = ['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume', 'Null']))
p = pd.concat(dfs)
del p['Null']
print p
p.to_csv('monthly.csv', sep = ',')
基本上,我将从csv文件创建的所有数据帧附加到列表中。 然后,我使用pd.concat函数合并数据帧列表dfs的每个元素之间的所有行。 然后我删除了' Null'柱。 您可能希望使用print p.head()仅显示前5个元素(默认参数为5)或p.tail()来显示结束,而不是print p。 最后,p.to_csv将所有合并的行导出到您想要的文件中。
答案 1 :(得分:1)
您可以打开文件一次并随时写入,您不需要一次存储所有数据,如果您有大量数据可能无法存储:
os.chdir(my_dir)
glb = glob.iglob('*.txt')
with open("monthly.csv", "w") as f:
p= pd.read_csv(next(glb), names=['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume', 'Null'])
del p["Null"]
p.to_csv(f)
for files in glb:
p = pd.read_csv(files, names=['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume', 'Null'])
del p["Null"]
p.to_csv(f, sep=',', header=False)
您只需使用p.to_csv
将文件对象传递给header=False
,以避免多次写入标题。
如果您不想使用Null列,则可以传递usecols=[0, 1, 2, 3, 4, 5, 6]
,而不是稍后删除该列:
with open("monthly.csv", "w") as f:
p = pd.read_csv(next(glb), names=['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume'], usecols=[0, 1, 2, 3, 4, 5, 6])
p.to_csv(f)
for files in glb:
p = pd.read_csv(files, names=['Name', 'Date', 'Open', 'High',
'Low', 'Close', 'Volume'], usecols=[0, 1, 2, 3, 4, 5, 6])
p.to_csv(f, sep=',', header=False)