【问题标题】:Save and read list of dataframes保存和读取数据框列表
【发布时间】:2020-02-04 14:09:28
【问题描述】:

我有一个包含数据框的列表(每个数据框都有一个时间线,总是从 0 开始并以不同的方式结束),我想将其保存为 .csv:

我希望能够以数据帧列表的形式读取原始格式的 .csv 文件。

由于我不知道如何使用数据框保存列表,我将列表连接起来并将所有内容保存为一个数据框: pd.concat(data).to_csv(csvfile)

为了阅读 .csv 我试过这个: df = pd.read_csv(csvfile) 这将给出全零的位置 zero_indices = list(df.loc[df['Unnamed: 0'] == 0].index)

将行数附加到此以获取最后一个数据帧 zero_indices.append(len(df))

获取范围 - 上述列表中连续条目的元组 zero_ranges = [(zero_indices[i], zero_indices[i+1]) for i in range(len(zero_indices) - 1)]

将数据框提取到列表中 X_test = [df.loc[x[0]:x[1] - 1] for x in zero_ranges]

我遇到的问题是索引位于带有数据框的最终列表中,但我真正想要的是最终列表中的列“未命名:0”被设置为每个数据框的索引:

【问题讨论】:

  • 您的意思是您需要将最终列表 (Out[66]) 中的 'Unnamed: 0' 列设置为列表中每个数据框的索引吗?
  • 是的,正是:)

标签: python pandas list dataframe


【解决方案1】:

我不完全确定你想如何解决这个问题,但这是我从你的问题陈述中理解的。让我知道它是否是您想要的:

我们有两个df:

>>> ee = {"Unnamed : 0" : [0,1,2,3,4,5,6,7,8],"price" : [43,43,14,6,4,2,6,4,2], "time" : [3,4,5,2,5,6,6,3,4], "hour" : [1,1,1,5,4,3,4,5,4]}
>>> one = pd.DataFame.from_dict(ee)
>>> dd = {"Unnamed : 0" : [0,1,2,3,4,5],"price" : [23,4,32,4,3,234], "time" : [3,2,4,3,2,4], "hour" : [3,4,3,2,4,4]}
>>> two = pd.DataFrame.from_dict(dd)

看起来像这样:

print(one)
       Unnamed : 0  price  time  hour
    0            0     23     3     3
    1            1      4     2     4
    2            2     32     4     3
    3            3      4     3     2
    4            4      3     2     4
    5            5    234     4     4

print(two)
         Unnamed : 0  price  time  hour
      0            0     23     3     3
      1            1      4     2     4
      2            2     32     4     3
      3            3      4     3     2
      4            4      3     2     4
      5            5    234     4     4

现在通过列表操作符组合这两个列表:

list_dfs = [one,two]
print(list_dfs)

[        Unnamed : 0  price  time  hour
     0            0     43     3     1
     1            1     43     4     1
     2            2     14     5     1
     3            3      6     2     5
     4            4      4     5     4
     5            5      2     6     3
     6            6      6     6     4
     7            7      4     3     5
     8            8      2     4     4,    
        Unnamed : 0  price  time  hour
     0            0     23     3     3
     1            1      4     2     4
     2            2     32     4     3
     3            3      4     3     2
     4            4      3     2     4
     5            5    234     4     4]

使用DataFrame的函数

set_index()

list_dfs_index = list(map(lambda x : x.set_index("Unnamed : 0"), list_dfs))
print(list_dfs_index)

[                price  time  hour
 Unnamed : 0
    0               43     3     1
    1               43     4     1
    2               14     5     1
    3                6     2     5
    4                4     5     4
    5                2     6     3
    6                6     6     4
    7                4     3     5
    8                2     4     4,              
                 price  time  hour
 Unnamed : 0
    0               23     3     3
    1                4     2     4
    2               32     4     3
    3                4     3     2
    4                3     2     4
    5              234     4     4]

或者,在将数据帧放入列表之前,您可以使用相同的 set_index 函数将索引设置为“未命名:0”。

【讨论】:

  • 非常感谢@CyrusDsouza!现在效果很好。
  • @CyrusDsouza 你美!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 2013-05-22
  • 1970-01-01
相关资源
最近更新 更多