Python 3.x 使用迭代连接熊猫中的数据帧,但它不';行不通

Python 3.x 使用迭代连接熊猫中的数据帧,但它不';行不通,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有几个数据帧或多或少地被同一个多索引索引索引(每个数据帧上可能缺少一些值,但总行数超过70K,缺少的值始终小于10)。我想给它们附加/合并/连接一个给定的数据帧(具有相同的索引)。我尝试使用for迭代和元组来实现这一点,如这里的示例所示。但是,最后,我的所有数据帧都不会合并。我提供了一个发生这种情况的简单示例。为什么它们不合并 df1 = pd.DataFrame(np.arange(12).reshape(4,3), index = ["A", "B"

我有几个数据帧或多或少地被同一个多索引索引索引(每个数据帧上可能缺少一些值,但总行数超过70K,缺少的值始终小于10)。我想给它们附加/合并/连接一个给定的数据帧(具有相同的索引)。我尝试使用for迭代和元组来实现这一点,如这里的示例所示。但是,最后,我的所有数据帧都不会合并。我提供了一个发生这种情况的简单示例。为什么它们不合并

df1 = pd.DataFrame(np.arange(12).reshape(4,3), index = ["A", "B", "C", "D"], columns = ["1st", "2nd", "3rd"])
df2 = df1 + 2
df3 = df1 - 2
for df in (df1, df2):
    df = pd.merge(df, df3, left_index = True, right_index = True, how = "inner")
df1, df2

你期望的结果是什么

for
循环中,
df
是循环变量,也是赋值语句左侧的结果。下面是与print语句相同的循环,以提供附加信息。我认为你写的中间结果太多了

for df in (df1, df2):
    print(df)
    print('-----')
    df = pd.merge(df, df3, left_index = True, right_index = True, how = "inner")
    print(df)
    print('==========', end='\n\n')
print(df)
您可以这样组合df1、df2和df3

print(pd.concat([df1, df2, df3], axis=1))

   1st  2nd  3rd  1st  2nd  3rd  1st  2nd  3rd
A    0    1    2    2    3    4   -2   -1    0
B    3    4    5    5    6    7    1    2    3
C    6    7    8    8    9   10    4    5    6
D    9   10   11   11   12   13    7    8    9
更新

下面是一种导入和连接多个CSV文件的惯用方法,可能位于多个目录中。简而言之:将每个文件读入一个单独的数据框;将每个数据帧添加到列表中;在末尾连接一次

参考:


我有几十个数据帧(比如说df1,…,dfn),我想在每个数据帧中添加一个数据帧(比如说dfUnique)。我不想做代码的复制粘贴,而是通过for循环或其他类似的迭代来完成。我写的代码,如果你运行它,在运行它之后,df1和df2保持不变(df3没有被合并)。你发布的链接给出了我想要的解决方案。
import pandas as pd
from pathlib import Path

df = list()

for filename in Path.cwd().rglob('*.csv'):
    with open(filename, 'rt') as handle:
        t = pd.read_csv(handle)
        df.append(t)
        print(filename.name, t.shape)
df = pd.concat(df)
print('\nfinal: ', df.shape)

penny.csv (62, 8)
penny-2020-06-24.csv (144, 9)
...etc

final:  (474, 20)