首页 > 解决方案 > Pandas 将 read_csv 读入多个 DataFrame

问题描述

我正在读入 Pandas 的文本文件中有一些数据。读入的 txt 的简化版本是:

idx_level1|idx_level2|idx_level3|idx_level4|START_NODE|END_NODE|OtherData...
353386066294006|1142|2018-09-20T07:57:26Z|1|18260004567689|18260005575180|...
353386066294006|1142|2018-09-20T07:57:26Z|2|18260004567689|18260004240718|...
353386066294006|1142|2018-09-20T07:57:26Z|3|18260005359901|18260004567689|...
353386066294006|1142|2018-09-20T07:57:31Z|1|18260004567689|18260005575180|...
353386066294006|1142|2018-09-20T07:57:31Z|2|18260004567689|18260004240718|...
353386066294006|1142|2018-09-20T07:57:31Z|3|18260005359901|18260004567689|...
353386066294006|1142|2018-09-20T07:57:36Z|1|18260004567689|18260005575180|...
353386066294006|1142|2018-09-20T07:57:36Z|2|18260004567689|18260004240718|...
353386066294006|1142|2018-09-20T07:57:36Z|3|18260005359901|18260004567689|...
353386066736543|22|2018-04-17T07:08:23Z||||...
353386066736543|22|2018-04-17T07:08:24Z||||...
353386066736543|22|2018-04-17T07:08:25Z||||...
353386066736543|22|2018-04-17T07:08:26Z||||...
353386066736543|403|2018-07-02T16:55:07Z|1|18260004580350|18260005235340|...
353386066736543|403|2018-07-02T16:55:07Z|2|18260005235340|18260005141535|...
353386066736543|403|2018-07-02T16:55:07Z|3|18260005235340|18260005945439|...
353386066736543|403|2018-07-02T16:55:07Z|4|18260006215338|18260005235340|...
353386066736543|403|2018-07-02T16:55:07Z|5|18260004483352|18260005945439|...
353386066736543|403|2018-07-02T16:55:07Z|6|18260004283163|18260006215338|...
353386066736543|403|2018-07-02T16:55:01Z|1|18260004580350|18260005235340|...
353386066736543|403|2018-07-02T16:55:01Z|2|18260005235340|18260005141535|...
353386066736543|403|2018-07-02T16:55:01Z|3|18260005235340|18260005945439|...
353386066736543|403|2018-07-02T16:55:01Z|4|18260006215338|18260005235340|...
353386066736543|403|2018-07-02T16:55:01Z|5|18260004483352|18260005945439|...
353386066736543|403|2018-07-02T16:55:01Z|6|18260004283163|18260006215338|...

我用来读入的代码如下:

mydata = pd.read_csv('/myloc/my_simple_data.txt', sep='|', 
 dtype={'idx_level1': 'int',
        'idx_level2': 'int',
        'idx_level3': 'str',
        'idx_level4': 'float',
        'START_NODE': 'str',
        'END_NODE': 'str',
        'OtherData...': 'str'},
parse_dates = ['idx_level3'],
index_col=['idx_level1','idx_level2','idx_level3','idx_level4'])

我真正想做的是为每个独特的 idx_level1&idx_level2值有一个单独的 panadas DataFrames。因此,在上面的示例中,将有 3 个 DataFrames分别与, &的idx_level1|idx_level2值有关。353386066294006|1142353386066736543|22353386066736543|403

是否可以读取这样的文本文件并将 idx_level2 中的每个更改输出到新的 Pandas DataFrame,也许作为某种循环的一部分?mydata或者,考虑到我所阅读的所有内容都表明迭代 DataFrame 效率低下,什么是拆分为 DataFrame 子集的最有效方法。

标签: pythonpandasdataframe

解决方案


按照您当前的操作阅读您的数据框,然后使用 groupby 并使用列表理解:

group = mydata.groupby(level=[0,1])
dfs = [group.get_group(x) for x in group.groups]

你可以通过这样做来调用你的数据框dfs[0]等等


推荐阅读