python迭代数据类型_在大型数据集上自动迭代推断数据类型和最小项大小
在我的工作領(lǐng)域,我經(jīng)常得到一個很大的csv文件,根本沒有關(guān)于內(nèi)容或格式的信息。我正在嘗試開發(fā)一個工作流來自動推斷列的數(shù)據(jù)類型以及對象數(shù)據(jù)類型的最大字符串長度,最終目標(biāo)是將格式化的數(shù)據(jù)集存儲在HDFStore中。我正在尋求幫助,為這個場景提供最佳實踐。我有一些有效的方法,但似乎效率低下:import pandas as pd
# first pass to determine file formats using pd.read_csv inference
fmts = []
chunker = pd.read_csv('../data/train.csv', chunksize=10000)
for chunk in chunker:
fmts.append(chunk.dtypes)
fmts = reduce(lambda x,y: x.combine(y, max), fmts)
前面的代碼段為每個塊累積推斷的數(shù)據(jù)類型,然后使用最大值減少它們:
^{pr2}$
所以第一步就完成了。我已經(jīng)創(chuàng)建了一個數(shù)據(jù)類型列表,這些數(shù)據(jù)類型可以在后續(xù)運行時傳遞給read_csv。現(xiàn)在要找到object列的最大長度,這些列將作為string存儲在HDFStore中:# second pass now get max lengths of objects
objs = fmts[fmts == 'object'].index
cnvt = {obj : str for obj in objs}
lens = []
chunker = pd.read_csv('../data/train.csv', chunksize=10000,
converters=cnvt, usecols=objs)
for chunk in chunker:
for col in chunk:
lens.append(chunk.apply(lambda x: max(x.apply(len))))
# reduce the lens into one
lens = dict(reduce(lambda x,y: x.combine(y, max), lens))
我現(xiàn)在有了一個字典,其中object類型的列是鍵,所有塊的最大單元格長度是值:In[2]:lens
Out[2]:
{'f137': 20,
'f138': 26,
'f206': 20,
'f207': 27,
'f276': 20,
'f277': 27,
'f338': 26,
'f390': 32,
'f391': 42,
'f419': 20,
'f420': 26,
'f466': 19,
'f469': 27,
'f472': 35,
'f534': 27,
'f537': 35,
'f626': 32,
'f627': 42,
'f695': 22,
'f698': 22}
最后一步是使用推斷的格式和長度將所有內(nèi)容存儲在HDFStore表中:# Lastly loop through once more to append to an HDFStore table!
store = pd.HDFStore("../data/train.h5")
chunker = pd.read_csv('../data/train.csv', chunksize=10000, dtype=dict(fmts))
for chunk in chunker:
store.append('train', chunk, min_itemsize=lens)
這個工作流程有意義嗎?其他人如何處理不適合內(nèi)存且需要存儲在HDFStore磁盤上的大型數(shù)據(jù)集?在
總結(jié)
以上是生活随笔為你收集整理的python迭代数据类型_在大型数据集上自动迭代推断数据类型和最小项大小的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: perl数组硬引用_perl引用和数组
- 下一篇: 改mysql修改界定符_dbvisual