Python 连接具有相同索引/列的多个表的最有效方法是什么?

Python 连接具有相同索引/列的多个表的最有效方法是什么?,python,bash,awk,sed,pandas,Python,Bash,Awk,Sed,Pandas,我有多个这样的表保存在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列未设置为索引,尽管使用pandas我有该选项。列A的所有条目在所有表中都是相同的 我想创建一个包含a、B、C、D、E、F、G列的表,用于计算B-G列的加权和。我想有两件事: 使用这些

我有多个这样的表保存在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列未设置为索引,尽管使用pandas我有该选项。列A的所有条目在所有表中都是相同的

我想创建一个包含a、B、C、D、E、F、G列的表,用于计算B-G列的加权和。我想有两件事:

  • 使用这些列创建数据框的最佳方法是什么?我所说的“最佳”是指保持低内存,并希望利用某种并行计算

  • 我想把这个数据帧保存在磁盘上,所以我想也许有更好的方法使用命令行工具,比如sed/awk/cut,来运行csv,然后我就可以加载了。有什么建议吗


  • 我只是从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')
    

    我只是从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')
    

    我只是从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')
    

    我只是从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')
    

    如果不发布一些具体的输入和预期的输出,很难说清楚,但听起来UNIX实用程序
    join
    正是您所寻找的。

    如果不发布一些具体的输入和预期的输出,很难说清楚,但听起来UNIX实用程序
    join
    正是您所寻找的。

    很难说清楚如果您没有发布一些具体的输入和预期的输出,但听起来您正在寻找的是UNIX实用程序
    join

    如果您没有发布一些具体的输入和预期的输出,很难说,但听起来您正在寻找的是UNIX实用程序
    join

    对于磁盘上的数据,csv是错误的方式,没有标准,唯一的数据类型是字符。csv的使用案例是,当您有少量的数据需要关注时,您是唯一需要访问数据的人,因此缺少标准不是什么大问题。但是,即使只是为了你,如果你稍后再回到你的数据,你会记得你使用的所有规范和你编码数据的条件吗?对于相当小的数据集,这不是一个问题,因为您可以直观地检查整个数据集。对于较大的数据集,应该使用sqlite或更高的关系数据库来持久化数据

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

    我认为合并可能是最好的方法。以下是一些示例数据:

    >>> 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
    设置要连接的列(以及所需的其他参数):


    如果您处理的数据太大,以至于您担心RAM,那么csv是错误的选择。csv通常是错误的方式。您至少应该使用sqlite。使用相同的语言和相同的数据库结构,您可以减少问题,提高可测试性和可维护性,并使您的生活总体上更轻松。

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

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

    我认为合并可能是最好的方法。以下是一些示例数据:

    >>> 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
    设置要连接的列(以及所需的其他参数):


    如果您处理的数据太大,以至于您担心RAM,那么csv是错误的选择。csv通常是错误的方式。您至少应该使用sqlite。使用相同的语言和相同的数据库结构,您可以减少问题,提高可测试性和可维护性,并使您的生活总体上更轻松。

    如果您想在磁盘上保存大量数据,csv是错误的选择,没有标准,唯一的数据类型是字符。csv的使用案例是,当您有少量的数据需要关注时,您是唯一需要访问数据的人,因此缺少标准不是什么大问题。但是,即使只是为了你,如果你稍后再回到你的数据,你会记得你使用的所有规范和你编码数据的条件吗?对于相当小的数据集,这不是一个问题,因为您可以直观地检查整个数据集。对于较大的数据集,应该使用sqlite或更高的re