【发布时间】:2015-03-24 02:23:52
【问题描述】:
我正在尝试在只有 4gb 内存的机器上处理一个大 (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()
【问题讨论】:
-
我会回答我自己的问题,以防其他人遇到问题并发现自己处于网络这个黑暗、孤独的角落。问题是 Term 需要是一个字符串,而 Term 的数字部分是一个数字变量而不是字符串。我无法让 str 函数在 Term() 部分中工作,但这确实适用于 index, row in plotty.iterrows(): condition = 'PLOT =' + str(plotty.iloc[index]['PLOT'] ) dfdum = store.select('wibble', [Term(condition)]).
-
对于索引,plotty.iterrows() 中的行:条件 = 'PLOT =' + str(plotty.iloc[index]['PLOT']) dfdum = store.select('wibble', [期限(条件)])
标签: python csv pandas hdfstore