【问题标题】:Pandas Creating multiple data frames using for loopPandas 使用 for 循环创建多个数据框
【发布时间】:2020-11-16 07:22:39
【问题描述】:

我正在寻找高效的 Python 代码来:

1.创建多个数据框 2. 循环遍历多个数据帧

例如,在我的代码中:

os.chdir(EU_path)
csv_files = glob.glob(EU_path + '\*.csv')
list_EU_data = []
for filename in csv_files:
    data = pd.read_csv(filename)
    list_EU_data.append(data)

list_EU_data 是来自 10 个欧洲国家/地区的 10 个产品销售 csv 文件的列表。例如,list_EU_data[0] 返回一个数据框,其中包含与销售信息相关的列。

在这里,我想在预处理数据帧的同时创建多个数据帧,例如,

首先选择列

EU[0] = list_EU_data[0].iloc[:, [0, 1]]
EU[1] = list_EU_data[1].iloc[:, [0, 1]]
...continues...
EU[9] = list_EU_data[9].iloc[:, [0, 1]]

接下来,从每个数据帧中,我想将 0 值替换为 1 并迭代所有数据帧:

EU[0].iloc[:, 1] = EU[0].iloc[:, 1].replace(0, 1)
EU[1].iloc[:, 1] = EU[1].iloc[:, 1].replace(0, 1)
...continues...
EU[9].iloc[:, 1] = EU[9].iloc[:, 1].replace(0, 1)

使用for循环,编写上述代码最有效的方法是什么?

【问题讨论】:

  • 1. Create multiple data frames 的代码是什么?
  • 我在帖子中更新了代码以显示数据文件

标签: python pandas loops


【解决方案1】:

如果需要使用DataFrames 列表的循环解决方案:

for i, df1 in enumerate(EU):
    df1 = df1.iloc[:, [0, 1]]
    df1.iloc[:, 1] = df1.iloc[:, 1].replace(0, 1)
    EU[i] = df1

也可以更改您的代码:

os.chdir(EU_path)
csv_files = glob.glob(EU_path + '\*.csv')
list_EU_data = []
for filename in csv_files:
    data = pd.read_csv(filename)
    data = data.iloc[:, [0, 1]]
    data.iloc[:, 1] = data.iloc[:, 1].replace(0, 1)
    list_EU_data.append(data)

【讨论】:

  • 在你的第一段代码中,'AttributeError: 'list' object has no attribute 'iloc'
  • @SuhwanChung - 这里df 不是列表,而是拆分前的DataFrame。
  • @SuhwanChung - 现在更好地理解了,需要什么,所以编辑了答案。
【解决方案2】:

请参考我的评论:https://stackoverflow.com/a/64798278/9967586 用于创建多个数据帧并循环这些 dfs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2023-03-19
    • 2019-12-07
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多