如果你想在磁盘上保存大量的数据,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。让这一切在相同的语言和相同的数据库结构,你减少问题的发生,提高了可测试性和可维护性,使您的生活更轻松的一般。
我为50/50之上,但它似乎像的意见是最好的询问,了解更多有关或建议如何改进的问题和答案。我不在这里,我暗示答案是'join'。 – 2014-12-01 22:26:56
我认为建议是有效的意见,尤其是在这样开放式的问题。公平地说,答案可能是加入! – 2014-12-01 22:31:06