Pandas打印到相应的屏幕,但只保存一些数据到csv

时间:2015-09-11 19:44:23

标签: python csv pandas

这是我的代码:

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天的数据。

2 个答案:

答案 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)