如果你想在磁盘上持久化大量数据,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]})
不幸的是,merge 一次只需要两个表,因此您需要嵌套它们或使用 reduce。这是一个使用索引的合并:
>>> 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
如果您需要合并不确定数量的数据帧,您可以使用 functools 模块中的reduce 函数和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。使用相同的语言和相同的数据库结构,您可以减少问题、提高可测试性和可维护性,并且总体上让您的生活更轻松。