【问题标题】:Combining a list of Dataframes组合数据框列表
【发布时间】:2019-03-01 14:21:33
【问题描述】:

我有一个包含多个 .csv 文件的文件夹。每个都包含有关加密货币的时间、最高价、最低价、开盘价、从成交量、成交量到收盘的数据。

我设法将 .csvs 加载到数据框列表中,并删除了我不需要的列 Open、High、Low、Volumefrom、Volumeto,留给我 Time Close 用于每个数据帧。

现在我想将数据帧列表合并到一个数据帧中,其中索引以最年轻硬币的时间戳开始,在本例中为 iota

这是我目前写的代码:

import pandas as pd
import os

# Path to my folder
PATH_COINS = r"C:\Users\...\Coins"

# creating a path for each of the .csv-files and saving it into a list
namelist = [name for name in os.listdir(PATH_COINS)]
path_lists = [os.path.join(PATH_COINS, path) for path in namelist]

# creating the dataframes and saving them into a list
dfs = [pd.read_csv(k, index_col=0) for k in path_lists]

# dropping unwanted columns 
for num, i in enumerate(dfs):
    i.drop(columns=["Open", "High", "Low", "Volumefrom", "Volumeto"], inplace=True)

# combining the list of dataframes into one dataframe     
pd.concat(dfs, join="inner", axis=1)

但是我收到一条错误消息并且无法弄清楚如何实现我的目标:

Traceback(最近一次调用最后一次):文件 “C:/Users/Jonas/PycharmProjects/Pandas/main.py”,第 16 行,在 pd.concat(dfs, join="inner", axis=1)

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\reshape\concat.py", 第 226 行,在 concat 中 返回 op.get_result()

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\reshape\concat.py", 第 423 行,在 get_result 中 复制=self.copy)

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\internals.py", 第 5425 行,在 concatenate_block_managers return BlockManager(块,轴)

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\internals.py", 第 3282 行,在 init self._verify_integrity()

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\internals.py", 第 3493 行,在 _verify_integrity construction_error(tot_items, block.shape[1:], self.axes)

文件 "C:\Users\Jonas\PycharmProjects\Pandas\venv\lib\site-packages\pandas\core\internals.py", 第 4843 行,在 construction_error 通过,暗示))

ValueError: 传递值的形状是 (5, 8514),索引意味着 (5, 第8490章)

【问题讨论】:

  • 您可能在至少一个 DataFrame 中有重复的索引值。如果您在[df.index.is_unique for df in dfs] 的输出中看到任何False 值,则可能是此错误的根源。
  • 是的,我的 .csv 文件中有重复项。我什至没有想到这一点,因为我从 api 获取数据并期望它被清理。非常感谢!

标签: python-3.x pandas indexing concat


【解决方案1】:

join 应该可以工作

检查重复索引值,因为它不知道如何跨多个 DF 映射多个重复索引(例如 df.index.is_unique

删除重复的索引值(例如,df.drop_duplicates(inplace=True))或here 方法之一应该可以解决它。

【讨论】:

  • 感谢您的回答,我的 .csvs 中有重复文件,这导致了错误。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多