当前位置:  开发笔记 > 编程语言 > 正文

遍历熊猫数据框列表

如何解决《遍历熊猫数据框列表》经验,为你挑选了1个好方法。

两个快速的熊猫问题供您选择。

    我有一个要应用过滤器的数据框列表。

    countries = [us, uk, france]
    for df in countries:
        df = df[(df["Send Date"] > '2016-11-01') & (df["Send Date"] < '2016-11-30')] 
    

    当我运行它时,df之后不会更改。这是为什么?如果我遍历数据帧以创建一个新列,如下所示,则可以正常工作,并更改列表中的每个df。

     for df in countries:
          df["Continent"] = "Europe"
    

    作为后续问题,当我创建不同国家的数据框列表时,我注意到了一些奇怪的事情。我定义了列表,然后将转换应用于列表中的每个df。在转换了这些不同的dfs之后,我再次调用了该列表。我很惊讶地看到列表仍然指向未更改的数据帧,因此我不得不重新定义列表以更新结果。有人能解释为什么会这样吗?

miradulo.. 6

看一下这个答案,您可以看到它for df in countries:等同于

for idx in range(len(countries)):
    df = countries[idx]
    # do something with df

这显然不会真正修改您列表中的任何内容。通常,在像这样的循环中迭代列表时,修改列表是一种不好的做法。

更好的方法是列表理解,您可以尝试类似

 countries = [us, uk, france]
 countries = [df[(df["Send Date"] > '2016-11-01') & (df["Send Date"] < '2016-11-30')]
              for df in countries] 

请注意,使用这样的列表理解,我们实际上并没有修改原始列表,而是创建了一个新列表,并将其分配给保存原始列表的变量。

此外,您可能会考虑将所有数据放在带有附加国家/地区列或类似内容的单个DataFrame中-Python级循环通常较慢,并且与单个DataFrame相比,使用DataFrames列表通常较不方便,可以充分利用矢量化熊猫方法。



1> miradulo..:

看一下这个答案,您可以看到它for df in countries:等同于

for idx in range(len(countries)):
    df = countries[idx]
    # do something with df

这显然不会真正修改您列表中的任何内容。通常,在像这样的循环中迭代列表时,修改列表是一种不好的做法。

更好的方法是列表理解,您可以尝试类似

 countries = [us, uk, france]
 countries = [df[(df["Send Date"] > '2016-11-01') & (df["Send Date"] < '2016-11-30')]
              for df in countries] 

请注意,使用这样的列表理解,我们实际上并没有修改原始列表,而是创建了一个新列表,并将其分配给保存原始列表的变量。

此外,您可能会考虑将所有数据放在带有附加国家/地区列或类似内容的单个DataFrame中-Python级循环通常较慢,并且与单个DataFrame相比,使用DataFrames列表通常较不方便,可以充分利用矢量化熊猫方法。

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有