生成多个 Pandas 数据框。

3
我正在从一个网站检索多个以csv格式保存的数据帧。我将这些数据帧保存在一个空列表中,然后逐个读取。由于它们具有不同的列名和列顺序,所以无法将它们追加到单个数据帧中。因此,我有以下问题:
我是否可以在用于读取文件的循环中创建一个具有不同名称的数据帧,以便我为每个检索到的文件创建一个新数据帧,而不是将它们保存到列表中?如果这不可行/推荐,那有没有一种方法来迭代我的列表以提取数据帧?目前我一次只读取一个数据帧,但我想找到一种自动化代码的方法来创建类似data_1、data_2等的东西。现在我的代码时间消耗不大,因为我只有4个数据帧,但如果有更多数据,则这可能会变得麻烦。以下是我的代码:
import pandas as pd
import urllib2
import csv

#we write the names of the files in a list so we can iterate to download the files
periods=['2012-1st-quarter','2012-2nd-quarter', '2012-3rd-quarter', '2012-4th-quarter']
general=[]
#we generate a loop to read the files from the capital bikeshare website
for i in periods:
    url = 'https://www.capitalbikeshare.com/assets/files/trip-history-data/'+i+'.csv'
    response = urllib2.urlopen(url)
    x=pd.read_csv(response)
    general.append(x)
q1=pd.DataFrame(general[0])

谢谢!


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Anzel
1个回答

3

如果您使用字典,会更好。另外,您也可以直接将URL传递给pandas.read_csv。因此,简化后的代码应如下所示:

import pandas as pd

periods = ['2012-1st-quarter','2012-2nd-quarter', '2012-3rd-quarter', '2012-4th-quarter']
url = 'https://www.capitalbikeshare.com/assets/files/trip-history-data/{}.csv'
d = {period: pd.read_csv(url.format(period)) for period in periods}

那么你可以像这样访问特定的DataFrame:

 d['2012-4th-quarter']

遍历所有数据框:

for period, df in d.items():
    print period
    print df

这非常优雅且完美运行。谢谢。只有一个问题,现在我已经将数据框存储在字典中,有没有办法一次性提取它们并重命名为df_1、df_2、df_3等? - asado23
你想重命名字典的键吗?重命名DataFrame是什么意思? - elyase
抱歉,我还是不明白,您说的“一次性提取全部”是指什么? - elyase
例如,要传递给数据框,我会执行以下操作:df_1=pd.DataFrame(d['2012-4th-quarter']),这将给我所需的数据框。我想知道是否有一种方法可以同时提取4个数据框(并创建df_2、df_3等),这样我就不必重复字典中元素的次数了。 - asado23
你不需要将它转换为DataFrame,d['2012-4th-quarter']已经是一个DataFrame了。 - elyase
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接