使用for循环创建和分配不同的变量[英] Creating and assigning different variables using a for loop

本文是小编为大家收集整理的关于使用for循环创建和分配不同的变量的处理方法,想解了使用for循环创建和分配不同的变量的问题怎么解决?使用for循环创建和分配不同的变量问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

所以我想做的是以下几点:

我在某个文件夹中有 300 多个 CSV.我想要做的是打开每个 CSV 并只取每个的第一行.

我想做的是:

import os

list_of_csvs = os.listdir() # puts all the names of the csv files into a list.

上面为我生成了一个类似 ['file1.csv','file2.csv','file3.csv'] 的列表.

这很好,但我卡住的地方是下一步.我将使用伪代码来演示:

import pandas as pd

for index,file in enumerate(list_of_csvs):
    df{index} = pd.read_csv(file)    

基本上,我希望我的 for 循环遍历我的 list_of_csvs 对象,并将第一项读取到 df1,第二项读取到 df2,等等.但是在尝试这样做时,我才意识到 - 我不知道通过迭代进行分配时如何更改分配的变量!!!

这就是我提出问题的原因.我设法找到了另一种方法来完成我原来的工作没有问题,但是在交互中进行变量赋值的问题是我无法找到明确答案的问题!

推荐答案

IIUC,我们可以很简单地做到这一点,让我们使用 Pathlib 代替 Python 3.4+ 中添加的 os

from pathlib import Path
csvs = [csv for csv in Path.cwd().glob('*.csv')]
#change Path(your_path) with Path.cwd() if script is in dif location

dfs = {} # lets hold the csv's in this dictionary

for file in csvs:
   dfs[file.stem] = pd.read_csv(file,nrows=3) # change nrows [number of rows] to your spec.

#or with a dict comprhension
dfs = {file.stem : pd.read_csv(file) for file in Path('location\of\your\files').glob('*.csv')}

这将返回一个数据帧字典,其键为 csv 文件名 .stem 添加此而不带扩展名.

很像

{
'csv_1' : dataframe,
'csv_2' : dataframe
} 

如果你想连接这些然后做

df = pd.concat(dfs)

索引将是 csv 文件名.

如果您有重复的文件名,那么使用字典不是您的最佳选择,我们可以使用列表.此外,可以使用集合库中的 defaultdict 或使用 if 语句检查匹配键并附加到每个键.

dfs = [pd.read_csv(file,nrows=1) for file in Path.cwd().glob('*.csv')]
df = pd.concat(dfs)

本文地址:https://www.itbaoku.cn/post/1728178.html