我正在python中迭代50个文件,并将它们分别转储到panda数据帧中。然后,我根据原始数据帧中特定字段中的值,从每个数据帧创建三个新的数据帧。这三个新的帧有了新的名称,其中包括它们被过滤的值
行得通,耶!我得到了我所有的数据帧!
问题是,我使用global()调用创建这些数据帧,如果不在内核中显式键入每个单独的数据帧名称,我不知道如何访问它们。
你可能会问,我为什么要这么做?
例如,我想获取所有以"cd"结尾的数据帧,并将它们附加(并集)到最终的数据帧中。我不想明确地给他们50个人打电话。我想循环浏览数据帧的列表来完成这项任务。
关于如何实现这一点,或者重新编写代码,有什么建议吗?
我是iPython这些更密集的流程的新手,所以不管怎样都要改变。
filelist = os.listdir()
sum_list = ['CAKE', 'TWINKIES', 'DOUGHNUTS', 'CUPCAKES']
for f in filelist:
state = re.match('((w+){2})_', f)
state_df = str(state.group(1)) + '_df'
data = pd.read_csv(f, low_memory = False)
df = pd.DataFrame(data)
for x in sum_list:
sdo = state_df + '_' + x.lower()
globals()[sdo] = pd.DataFrame(df.loc[df['summary_level'] == x])
我认为一个更好的方法是创建自己的字典,而不是使用全局字典!只需创建自己的列表并附加到某个列表或列表字典中?(取决于分类):
dfs = {}
for f in filelist:
...
df = pd.read_csv(f) # this returns a DataFrame
for x in sum_list:
...
dfs[sdo] = df[df.summary_level == x] # again, this return a DataFrame
您可以使用默认dict,并将每个dict分配给一个子字典:
from collection import defaultdict
dfs = defaultdict({})
...
dfs[x][sdo] = ...
,即dfs['CAKE']
将是所有CAKE数据帧