【问题标题】:Removing an element from dictionary of list of dataframes从数据框列表的字典中删除元素
【发布时间】:2021-10-31 18:14:57
【问题描述】:

这是我的数据结构:

'CRWD', [        Date      CRWD
0 2020-10-01  0.040416
1 2020-10-02 -0.020998,         Date      CRWD
0 2020-10-05  0.035819
1 2020-10-06  0.001726
2 2020-10-07 -0.003859
3 2020-10-08 -0.011067
4 2020-10-09  0.004197,         Date      CRWD
0 2020-10-12  0.016647
1 2020-10-13  0.046862
2 2020-10-14 -0.032788
3 2020-10-15 -0.016442
4 2020-10-16 -0.000138]

所以它的 {StockTicker : [week1,week2,week3,etc]} 其中 weekX 对应于该周内每一天的数据框。 我想删除不是整周的日子(如本例中的第 1 周)。这是我的做法:

for k in weekList.keys():
    for x in weekList[k]:
        if len(x) <= 3:
            weekList[k].remove(x) #Where error occurs
weekList

我收到此错误: ValueError:只能比较标记相同的 DataFrame 对象

在代码中,x 是 dataframe 类型,而 weekList[k] 是 List 类型。我认为这意味着我可以这样对待列表中的每个元素,但问题似乎是列表的元素是一个数据框。这很奇怪,因为我只想将其从列表中删除。提前致谢。

【问题讨论】:

    标签: python list dataframe dictionary for-loop


    【解决方案1】:

    那是因为如果你使用list.remove(x),那实际上是扫描整个list,找到一个等于x的元素并将其删除。但要做到这一点,Python 需要将 x(一个 DataFrame 对象)与 list(也是 DataFrames)中的元素进行比较,并且它不能像 ValueError 告诉你的那样这样做。

    尝试以下方法,它应该可以工作:

    for i, x in enumerate(weekList[k]):
        if len(x) <= 3:
            del weekList[k][i] #Where error occurs
    

    【讨论】:

      【解决方案2】:

      试试这个:

      print({k: v for k, v in weekList.items() if len(v) > 3})
      

      【讨论】:

      • 这会检查列表的长度(48 周),而不是每个列表项中条目的长度。如果您愿意,我可以添加更多数据
      猜你喜欢
      • 2016-05-06
      • 1970-01-01
      • 2022-08-18
      • 2019-08-22
      • 2019-06-04
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多