2014-12-01 44 views
0

我有这样保存在CSV中的多个表。使用相同索引/列连接多个表的最有效方法是什么?

Table 1: Columns A,B 
Table 2: Columns A,C 
Table 3: Columns A,D 
Table 4: Columns A,E 
Table 5: Columns A,F 
Table 6: Columns A,G 

所有的值都是浮点,除了列A.列A没有设置为索引,虽然使用熊猫我有该选项。列A中的所有条目在所有表中都相同。

我想创建一个列A,B,C,D,E,F,G的表格,用于计算列B-G的加权总和。我有两个一般的东西我在想:

  1. 什么是创建一个与这些列的熊猫数据框的最佳方式是什么? “最好”,我的意思是保持公羊低,并希望利用某种并行计算。

  2. 我想坚持这个数据框在磁盘上,所以我想也许有更好的方法使用像sed/awk/cut这样的命令行工具来获得一个csv,然后我就可以加载。那里有任何提示?

回答

1

我只是从CSV中读取数据,加入,转储到主CSV。

喜欢的东西:

data = None 
filelist = ['CSV1.csv', 'otherfile.csv', ..., 'Lastfile.csv'] 
for f in filelist: 
    if data is None: 
     data = pandas.read_csv(f, index_col='A') 
    else: 
     data = data.join(pandas.read_csv(f, index_col='A')) 

data.to_csv('Big.csv') 
1

很难没有你发布一些具体的投入和预期产出地说,但它听起来像UNIX工具join是你在找什么。

+1

我为50/50之上,但它似乎像的意见是最好的询问,了解更多有关或建议如何改进的问题和答案。我不在这里,我暗示答案是'join'。 – 2014-12-01 22:26:56

+1

我认为建议是有效的意见,尤其是在这样开放式的问题。公平地说,答案可能是加入! – 2014-12-01 22:31:06

1

如果你想在磁盘上保存大量的数据,csv是一个错误的路要走,没有标准,唯一的数据类型是字符。 csv的用例是当你有少量的数据时,你想要关注,而你是唯一需要访问数据的人,所以缺乏标准并不是一个大问题。但即使只是为了你,如果你以后再回到你的数据中,你会记得你使用的所有规格和你对数据进行编码的条件吗?对于相当小的数据集,这不是一个问题,因为你可以直观地检查整个事情。对于较大的数据集,您应该使用sqlite或更大的关系数据库来保存数据。

问:“用相同索引/列连接多个表的最有效方法是什么?”

我认为pd.merge可能是最好的办法。下面是一些样本数据:

>>> import pandas as pd 
>>> t1 = pd.DataFrame({'a': [1,2,3,4], 'b': [5,5,5,5]}) 
>>> t2 = pd.DataFrame({'a': [1,2,3,4], 'c': [6,6,6,6]}) 
>>> t3 = pd.DataFrame({'a': [1,2,3,4], 'd': [7,7,7,7]}) 

不幸的是合并只需要两个表的时间,所以你需要将其嵌套或使用减少。下面是一个使用该索引的合并:

>>> pd.merge(pd.merge(t1, t2), t3) 
    a b c d 
0 1 5 6 7 
1 2 5 6 7 
2 3 5 6 7 
3 4 5 6 7 

下面是一个使用列'a'合并:

>>> pd.merge(pd.merge(t1, t2, on='a'), t3, on='a') 
    a b c d 
0 1 5 6 7 
1 2 5 6 7 
2 3 5 6 7 
3 4 5 6 7 

如果您需要合并dataframes数量不确定的,你可以使用reduce功能,发现在fucntools模块里,与partial设置(你的愿望以及其他参数)列加入上:

>>> import functools 
>>> functools.reduce(functools.partial(pd.merge, on='a'), [t1, t2, t3]) 
    a b c d 
0 1 5 6 7 
1 2 5 6 7 
2 3 5 6 7 
3 4 5 6 7 

如果您“再处理是如此之大,你担心RAM中的数据,CSV是错误的路要走。一般来说,csv是一种错误的方式。至少应该使用sqlite。让这一切在相同的语言和相同的数据库结构,你减少问题的发生,提高了可测试性和可维护性,使您的生活更轻松的一般。

+0

是否有为什么CSV是错误的方式去解释? – 2014-12-01 21:43:18

+0

@Jidder,我加入了更多的解释。 – 2014-12-01 22:23:46

+0

好吧谢谢,这使得它更清晰:) – 2014-12-01 22:26:29

相关问题