【问题标题】:Looping through list of data frames and performing operation循环遍历数据帧列表并执行操作
【发布时间】:2017-10-27 23:04:15
【问题描述】:

我有一个数据框列表,我正在使用 for 循环对列表执行操作。 df1、df2、df3 和 df4 是数据帧。操作后,我没有找到对数据框的修改。请帮助我了解我缺少什么以及为什么这不起作用?

为了将更改传递给源数据帧,我需要进行哪些修改。

sheetnames = [df1, df2, df3, df4]
i=0
for sheet in sheetnames:    
    ixNaNList = sheet[sheet.isnull().all(axis=1) == True].index.tolist()
    if len(ixNaNList) > 0:
        ixNaN = ixNaNList[0]
        sheetnames[i]=sheet[:ixNaN]
    i=i+1

【问题讨论】:

    标签: python pandas for-loop dataframe data-manipulation


    【解决方案1】:

    您的赋值 sheetnames[i] = ...sheet[:ixNaN] 的计算结果替换列表 sheetnames 的第 i 个元素。

    因此它对df1df2df3df4 的内容没有影响。

    【讨论】:

    • 能否请您帮助我了解如何修改 df1、df2、df3 或 df4 数据帧。
    【解决方案2】:

    试试这个:

    sheetnames = [df1, df2, df3, df4]
    def drop_after_na(df):
        return df[df.isnull().all(axis=1).astype(int).cumsum() <= 0]
    sheetnames = map(drop_after_na, sheetnames)
    

    试试这个:

    sheetnames = ['df1', 'df2', 'df3', 'df4']
    for sheet in sheetnames:
        exec('{sheet} = {sheet}[{sheet}.isnull().all(axis=1).astype(int).cumsum() <= 0]'.format(sheet=sheet))
    

    【讨论】:

    • 我实际上是在命中空行后删除所有行。感谢您的帮助
    • 感谢您的帮助!但是,尽管df[df.isnull().all(axis=1).astype(int).cumsum() &lt;= 0] 删除了 df 中 NAs 之后的所有行,但此更改不会使用 map 函数传递到 df1、df2 等。有趣的是,我可以在 sheetnames[i] 中看到所需的结果。
    • 我知道你的意思,但我不认为做这种代码是个好主意!您应该阅读更多 python 和 pandas 文本和代码,并尝试以 python 方式编程。
    猜你喜欢
    • 2022-01-15
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2017-03-01
    相关资源
    最近更新 更多