使用for循环从列表创建数据框

时间:2019-09-08 16:07:18

标签: python pandas

Python / Pandas初学者在这里。我有一个列表,每个名称代表计算机上的一个csv文件。我想为这些csv文件中的每一个创建一个单独的pandas数据框,并为数据框使用相同的名称。我可以通过在列表中为每个名称创建单独的一行代码,并随着列表的变化而手动添加/删除这些代码行,来以非常低效的方式执行此操作,例如当我有3个名称Mark,Frank和彼得:

path = 'C:\\Users\\Me\\Desktop\\Names'

Mark = pd.read_csv(path+"Mark.csv")
Frank = pd.read_csv(path+"Frank.csv")
Peter = pd.read_csv(path+"Peter.csv")

问题是我通常会有十几个名字,而且它们经常更改,因此效率不是很高。相反,我想我会保留一个名称列表,以在需要时进行更新,并使用for循环来完成其余操作:

path = 'C:\\Users\\Me\\Desktop\\Names'
names = ['Mark','Frank','Peter']

for name in names:
    name = pd.read_csv(path+name+'.csv')

这不会产生错误,但是不会创建3个不同的数据框Mark,Frank和Peter,而是仅使用列表中第一个条目中的数据来创建单个数据框“名称”。如何进行这项工作,以便为列表中的每个名称创建一个单独的数据框,并为每个数据框赋予与读取的csv文件相同的名称?

4 个答案:

答案 0 :(得分:3)

name是用于迭代列表的变量。对其进行修改不会进行任何明显的更改。

path = 'C:\\Users\\Me\\Desktop\\Names'
names = ['Mark','Frank','Peter']
dfs = []

for name in names:
    dfs.append(pd.read_csv(path + name + '.csv'))

# OR
dfs = [
    pd.read_csv(path + name + '.csv')
    for name in names
]

或者,您可以使用dict将名称与文件映射。

path = 'C:\\Users\\Me\\Desktop\\Names'
names = ['Mark','Frank','Peter']
dfs = {}

for name in names:
    dfs[name] = pd.read_csv(path + name + '.csv')

# OR
dfs = {
    name : pd.read(path + name + '.csv')
    for name in names
}

答案 1 :(得分:3)

  

它仅使用列表中第一个条目中的数据创建一个数据框“名称”。

它使用 last 条目,因为每次循环时,name都会被下一个read_csv调用的结果所替换。 (实际上,它被替换为列表中的值之一,而 then 替换为read_csv结果;为避免混淆,应为循环变量使用单独的名称作为输出。特别是因为name对于调用结果没有意义:))

  

如何进行这项工作

您有一个输入值列表,因此也需要一个输出值列表。最简单的方法是使用列表理解,以您要开始的列表来描述所需的列表:

csvs = [
    pd.read_csv(f'{path}{name}.csv')
    for name in names
]

它与显式循环的工作方式相同,除了它会根据每次计算所得的值自动构建一个列表。这意味着它说的是:“ csvs是这些pd.read_csv结果的列表,每个forname的{​​{1}}计算一次“。

答案 2 :(得分:2)

两个选项: 如果您知道所有csv文件的名称,则可以编辑代码,仅添加一个列表来保存所有文件。 例子

    self.addEventListener('install', event => event.waitUntil(
  caches.open('web_pwa').then(cache => cache.add('/'))
));

self.addEventListener('fetch', event => event.respondWith(
  caches.open('web_pwa')
    .then(cache => cache.match(event.request))
    .then(response => response || fetch(event.request))
));

否则,您可以查找所有具有csv扩展名的文件,并使用path = 'C:\\Users\\Me\\Desktop\\Names' names = ['Mark','Frank','Peter'] dfs = [] for name in names: dfs.append(pd.read_csv(path+name+'.csv')

打开所有文件。
listdir()

答案 3 :(得分:0)

| Something | Else |
|---------------|------------------------------------------------------------------------------------------------------|
| Short | This is longer this is longer this is longer this is longer this is longer this is longer this is longer this is longer this is longer this is longer this is longer this is longer |
| Short | |