熊猫read_csv进入多个DataFrames

时间:2018-12-18 14:33:35

标签: python pandas 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_level1idx_level2值有一个单独的panadas DataFrames。因此,在上面的示例中,将有3个数据帧分别与idx_level1|idx_level2353386066294006|1142353386066736543|22的{​​{1}}值有关。

是否可以像这样读取文本文件并将idx_level2中的每个更改输出到新的Pandas DataFrame,也许是某种循环的一部分?另外,将353386066736543|403拆分为DataFrame子集是最有效的方法,因为我已阅读的所有内容都表明,遍历DataFrame效率不高。

3 个答案:

答案 0 :(得分:2)

按当前方式读取数据框,然后进行分组和使用列表理解:

'\xde'

您可以通过执行group = mydata.groupby(level=[0,1]) dfs = [group.get_group(x) for x in group.groups] 等来调用数据框

答案 1 :(得分:0)

要专门处理最后一段,您可以使用类似以下内容的列中的唯一值来创建dfs的字典:

import copy
dict = {}
cols = df[column].unique()

for value in col_values:
    key = 'df'+str(value)
    dict[key] = copy.deepcopy(df)
    dict[key] = dict[key][df[column] == value]
    dict[key].reset_index(inplace = True, drop = True)

其中列= idx_level2

答案 2 :(得分:0)

按原样读取表并使用groupby,例如:

data = pd.read_table('/myloc/my_simple_data.txt', sep='|')
groups = dict()
for group, subdf in data.groupby(data.columns[:2].tolist()):
    groups[group] = subdf

现在您在字典中拥有所有子数据帧,其关键字是两个索引器的元组(例如:(353386066294006, 1142)