【问题标题】:generate multiple pandas data frames生成多个熊猫数据框
【发布时间】:2015-03-24 11:30:30
【问题描述】:

我正在从网站检索多个 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])

谢谢!

【问题讨论】:

  • 从技术上讲,这在您的代码中没有任何问题,尽管您可能会受益于创建一个接受 periods indexname 之类的参数并且仅在调用时返回 Dataframe 的函数。

标签: python python-2.7 pandas dataframe


【解决方案1】:

如果使用dict会更好,也可以直接将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 等的东西?
  • 您想重命名字典的键名吗?重命名 DataFrame 是什么意思?
  • 不,我需要处理数据帧,但要做到这一点,我会从字典中提取它们,所以我想知道是否有办法一次性提取所有数据。
  • 对不起,我还是不明白,一次全部提取是什么意思?
  • 例如,要传递给数据帧,我会执行以下操作:df_1=pd.DataFrame(d['2012-4th-quarter']) 这给了我所需的数据帧。我想知道是否有办法一次提取 4 个数据帧(并创建 df_2、df_3 等),所以我不必像字典中的元素一样多次重复这个过程。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多