【问题标题】:Iterate over list (2 dataframes in 1 list)遍历列表(1 个列表中的 2 个数据帧)
【发布时间】:2021-02-16 11:26:33
【问题描述】:

我同时导入2个数据框:

import pandas as pd
import numpy as np
import time
import glob
import os

msci_folder = 'C:/Users/Mike/Desktop/docs'
mscifile = glob.glob(msci_folder + "/*.csv")

dfs = []
for file in mscifile:
    df = pd.read_csv(file)
    dfs.append(df)

现在我想为每个单独的数据框应用我使用的代码,但我收到错误:

AttributeError: 'list' 对象没有属性 'loc'

我试试:

for i, df in enumerate(dfs):
    dfs = dfs.loc[dfs['URI'] == '/ID']
    dfs.TIMESTAMP = dfs.TIMESTAMP.apply(lambda x: '%.3f' % x)
    dfs.insert(0, 'Date', 0)
    dfs['Date'] = [x[:8] for x in dfs['TIMESTAMP']]
    dfs.to_csv('C:/Users/Mike/Desktop/docs/test.csv', index=False) 

【问题讨论】:

    标签: python pandas list iteration


    【解决方案1】:

    在您的第二个for 循环中:

    for i, df in enumerate(dfs):
        dfs = dfs.loc[dfs['URI'] == '/ID']
        dfs.TIMESTAMP = dfs.TIMESTAMP.apply(lambda x: '%.3f' % x)
        dfs.insert(0, 'Date', 0)
        dfs['Date'] = [x[:8] for x in dfs['TIMESTAMP']]
        dfs.to_csv('C:/Users/Mike/Desktop/docs/test.csv', index=False) 
    

    您使用了dfs,这是您创建的初始列表,因此出现了错误。您应该使用df 更改for 循环内的每个dfs 实例。

    for i, df in enumerate(dfs):
        # dfs = dfs.loc[dfs['URI'] == '/ID']
        df = df.loc[df['URI'] == '/ID']
    
        # ... and so on
    
        # save to different files
        df.to_csv(f'C:/Users/Mike/Desktop/docs/test_{i}.csv', index=False) 
    

    【讨论】:

    • 谢谢!也许你可以告诉我如何在所有代码(第一个和第二个?)之后访问每个 df 或用不同的名称保存它们?
    • @MamedMamedov 通过保存到不同的文件更新了答案。只需根据i更改文件名即可。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多