如何将大型CSV加载到keras模型中?

时间:2019-04-08 22:22:31

标签: numpy dataframe keras

我需要将大型csv转换为Keras模型的一种热编码np.ndarray。

For ex: csv data = 

  F1  F2  F3  
1.'M' 'N' 'I' 
2.'-' 'M' 'K'

Each Column's Possible Values
F1: ['-', 'M', 'N']
F2: ['-', 'A', 'B', 'M', 'N']
F3: ['-', 'I', 'J', 'K']

Expected Value(One hot encode in np.array)
   F1       F2                F3  
1. 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0
2. 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1

我能够读取csv,然后逐行解析。 但这很慢,而且文件很大。 有没有一种方法可以使用“ pd.dataframe.apply”转换为一种热编码?

2 个答案:

答案 0 :(得分:1)

傻瓜....大声笑,熊猫对像我这样的假人有get_dummies函数。这是视频 https://www.youtube.com/watch?v=0s_1IsROgDc


实现get_dummies之后,我的模块抛出大小错误。 我发现,因为我使用.fit_generator(),然后加载了一个数据框,然后加载了get_dummies。如果批次没有所有可能的值,它将返回不一致的大小。

解决方案:从sklearn.preprocessing导入OneHotEncoder

在这里,如果您有大量数据集,那么可以为您做更多的工作。

答案 1 :(得分:0)

要生成数据以测试我的方法,我使用您指定的60000000行的格式(或以上每种组合的1000000的60倍)生成了一个文件。因为每行的数据只能是60个选项之一,所以不存储数据(因为顺序无关紧要),所以存储每行的每个外观的计数要快得多,因为与转换60000000行相比,您可以将60转换为您的一种热门编码。注意:数据文件最终为480mb。以下代码将数据读入字典:

def foo():
    data = {}
    with open('data.csv') as f:
        for line in f:
            try:
                data[line] += 1
            except KeyError as e:
                data[line] = 1

有了print(timeit(__main__, number=10)),我的时间达到了125.45043465401977

从那时起,您可以将每个字符串行转换为一种热编码,并添加n个副本进行训练。由于Keras可以使用python generator object进行训练,因此这也应该使训练模型更加容易。这意味着所有数据都不会存储在内存中,从而可以在大于RAM大小的数据集上进行训练。