我试图在只有4GB RAM(不要问)的机器上处理大型(2gb)csv文件,以生成包含需要处理的数据子集的不同格式化csv 。我正在读取文件并创建一个HDFstore,我稍后会查询输出所需的数据。一切正常,除了我无法使用Term从商店检索数据 - 错误消息返回PLOT不是列名。个别变量看起来很好,商店就是我所期望的,我只能看到错误的位置。 (nb pandas v14和numpy1.9.0)。对此非常陌生,请为笨重的代码道歉。
#wibble wobble -*- coding: utf-8 -*-
# short version
def filesport():
import pandas as pd
import numpy as np
from pandas.io.pytables import Term
Location = r"CL_short.csv"
store = pd.HDFStore('blarg.h5')
maxlines = sum(1 for line in open (Location))
print maxlines
#set chunk small for test file
chunky=4
plotty =pd.DataFrame(columns=['PLOT'])
dfdum=pd.DataFrame(columns=['PLOT', 'mDate', 'D100'])
#read file in chunks to avoid RAM blowing up
bucket = pd.read_csv(Location, iterator=True, chunksize=chunky, usecols= ['PLOT','mDate','D100'])
for chunk in bucket:
store.append('wibble', chunk, format='table', data_columns=['PLOT','mDate','D100'], ignore_index=True)
#retrieve plot numbers and select unique items
plotty = store.select('wibble', "columns = ['PLOT']")
plotty.drop_duplicates(inplace=True)
#iterate through unique plots to retrieve data and put in dataframe for output
for index, row in plotty.iterrows():
dfdum = store.select('wibble', [Term('PLOT', '=', plotty.iloc[index]['PLOT'])])
#process dfdum for output to new csv
print("successful completion")
filesport()
答案 0 :(得分:0)
那些希望通过风滚草来到这里的人的最终列表,并且通过处理大型.csv文件和尝试检索/处理数据的各种方法同样令人困惑。最大的问题是获得pytables Term的sytax。尽管有几个例子表明可以使用& A> 20'这从来没有对我有用。我设置了一个包含Term查询的字符串条件,这是有效的(它在文档TBF中)
还发现查询HDF更容易直接从列表中的商店检索唯一项目,然后可以对其进行排序和迭代以通过绘图检索数据图。请注意,我希望最终的csv文件具有绘图,然后是日期顺序的所有D100数据,因此最后是枢轴。
以块的形式读取csv文件意味着从商店中检索到的每个绘图都有一个标题,这会写入最终的csv,这会搞砸了。我确信只有一个标题比我在这里显示的标题更优雅的方式。
它工作,大约需要2个小时来处理数据并生成最终的csv文件(初始文件2GB,30 + 300行,10万多个独特图表的数据,机器有4GB RAM但运行32位,这意味着只有2.5GB RAM可用)。
祝你好运,如果你有类似的问题,我希望你找到这个有用的
#wibble wobble -*- coding: utf-8 -*-
def filesport():
import pandas as pd
import numpy as np
from pandas.io.pytables import Term
print (pd.__version__)
print (np.__version__)
Location = r"conliq_med.csv"
store = pd.HDFStore('blarg.h5')
maxlines = sum(1 for line in open (Location))
print maxlines
chunky=100000
#read file in chunks to avoid RAM blowing up select only needed columns
bucket = pd.read_csv(Location, iterator=True, chunksize=chunky, usecols= ['PLOT','mDate','D100'])
for chunk in bucket:
store.append('wibble', chunk, format='table', data_columns=['PLOT','mDate','D100'], ignore_index=True)
#retrieve unique plots and sort
plotty = store.select_column('wibble', 'PLOT').unique()
plotty.sort()
#set flag for writing file header
i=0
#iterate through unique plots to retrieve data and put in dataframe for output
for item in plotty:
condition = 'PLOT =' + str(item)
dfdum = store.select('wibble', [Term(condition)])
dfdum["mDate"]= pd.to_datetime(dfdum["mDate"], dayfirst=True)
dfdum.sort(columns=["PLOT", "mDate"], inplace=True)
dfdum["mDate"] = dfdum["mDate"].map(lambda x: x.strftime("%Y - %m"))
dfdum=dfdum.pivot("PLOT", "mDate", "D100")
#only print one header to file
if i ==0:
dfdum.to_csv("CL_OP.csv", mode='a')
i=1
else:
dfdum.to_csv("CL_OP.csv", mode='a', header=False)
print("successful completion")
filesport()