如何在Python中创建数据框的数组

20

我想写一段代码来创建多个数据帧数组,它们的名称格式为word_0000,其中四位数字表示月份和年份。我想要实现的示例是创建以下数据帧:

df_0115, df_0215, df_0315, ... , df_1215
stat_0115, stat_0215, stat_0315, ... , stat_1215

最好使用字典 df['0115'],df['0215'],stat['0115'],stat['0215'] 等。 - furas
2个回答

34

我建议您创建一个字典来容纳DataFrames。这样,您就可以使用月份-日期键对它们进行索引:

import datetime as dt 
import numpy as np
import pandas as pd

dates_list = [dt.datetime(2015,11,i+1) for i in range(3)]
month_day_list = [d.strftime("%m%d") for d in dates_list]

dataframe_collection = {} 

for month_day in month_day_list:
    new_data = np.random.rand(3,3)
    dataframe_collection[month_day] = pd.DataFrame(new_data, columns=["one", "two", "three"])

for key in dataframe_collection.keys():
    print("\n" +"="*40)
    print(key)
    print("-"*40)
    print(dataframe_collection[key])

以上代码会打印出以下结果:

========================================
1102
----------------------------------------
        one       two     three
0  0.896120  0.742575  0.394026
1  0.414110  0.511570  0.268268
2  0.132031  0.142552  0.074510

========================================
1103
----------------------------------------
        one       two     three
0  0.558303  0.259172  0.373240
1  0.726139  0.283530  0.378284
2  0.776430  0.243089  0.283144

========================================
1101
----------------------------------------
        one       two     three
0  0.849145  0.198028  0.067342
1  0.620820  0.115759  0.809420
2  0.997878  0.884883  0.104158

ŤįĘŤįĘPedroÔľĀŤŅôś†∑ŚĀönew_dataframe = AŚíĆdataframe_collection[month_day] = new_dataframeśėĮŚŅÖŤ¶ĀÁöĄŚźóÔľüśąĎŚŹ™śėĮŚĀöšļÜdataframe_collection[month_day] = A„Äā - Ana
我也很好奇为什么打印过程会以随机顺序打印数据框!在我的情况下,这并不重要,只是一个一般性的问题。 - Ana
1
嗨Ana,你做得很对。不需要使用“new_dataframe”这个中间变量。我已更新答案以反映这一点。至于结果以随机顺序打印的问题,这与Python字典的实现有关。字典的键值对存储在一个称为哈希表的数据结构中。这个数据结构被设计用于快速查找,并且为了实现这个算法,存储键的方式可能是随机的。 - Pedro M Duarte
1
如果你的应用程序需要按排序方式迭代字典键,我建议你导入collections模块并使用OrderedDict而不是普通的dict来收集你的数据框:dataframe_collection = collections.OrderedDict() - Pedro M Duarte

8

df将包含你需要的所有CSV文件。df[0]用于访问第一个文件。

df=[]    
files = glob.glob("*.csv")
    for a in files:
        df.append( pd.read_csv(a))

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