我有几个数据帧或多或少地被相同的MultiIndex索引(每个数据帧上可能缺少一些值,但总行超过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
发布于 2020-08-27 04:06:26
你的预期结果是什么?
在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文件的惯用方法,可能位于多个目录中。简而言之:将每个文件读取到一个单独的数据帧中;将每个数据帧添加到列表中;在末尾连接一次。
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)
https://stackoverflow.com/questions/63608454
复制相似问题