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