Pandas:水平组合多个dataframe/csv文件,同时它们都共享相同的列名

bf1o4zei  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(134)

我有许多pandas Dataframe ,每个 Dataframe 由两列组成,一列名为'dates',其中包含日期列表,另一列名为'result'。我希望能够将所有这些数据框架组合成一个数据框架,其中包含一个“日期”列和多个“结果”列,每个数据框架都有一个。我尝试在streamlit中将结果显示为折线图。
这就是我想象的样子:
DF1
| 日期|结果|
| - -----|- -----|
| 2019 - 06 - 21 10:00:00| 0.5|
| 2019 - 06 - 22 01:00:00| 2.4|
| 2019 - 06 - 21 10:00:00|六点五|
DF2
| 日期|结果|
| - -----|- -----|
| 2019 - 06 - 21 10:00:00| 0.7|
| 2019 - 06 - 23 10:00:00| 0.5|
| 2019 - 06 - 21 10:00:00| 0.2|
df1 + df2
| 日期|结果|结果|
| - -----|- -----|- -----|
| 2019 - 06 - 21 10:00:00| 0.5| 0.7|
| 2019 - 06 - 22 01:00:00| 2.4||
| 2019 - 06 - 23 10:00:00||0.5|
| 2019 - 06 - 21 10:00:00|六点五|0.2|
我已经用axis = 1尝试过concat,但是似乎阻碍我的是所有csv文件的列都有相同的键,这会导致错误。
有谁知道一种方法来使这个工作,或某种变通方法?

jjhzyzn0

jjhzyzn01#

不要使用concat,而使用pandas中的“merge”。它会将所有的 Dataframe 合并到一个最终的 Dataframe 中。
例如:

final_df = dataframes[0]

for df in dataframes[1:]:
    final_df = pd.merge(final_df, df, on='dates', how='outer')

print(final_df)
bvuwiixz

bvuwiixz2#

如果我理解正确的话,使用read_csvindex_col参数将第一列设置为索引:

import glob

dfs = [pd.read_csv(file, index_col=0) for file in glob.glob('path')]

df = pd.concat(dfs, axis=1)

如果输入是具有两列的DataFrame列表:

df = pd.concat([x.set_index(x.columns[0]) for x in dfs], axis=1)

相关问题