blu*_*e13 7 python performance dataframe pandas
我想DataFrame通过读取文本文件来创建一个多索引.是否更快创建多索引,然后使用文本文件为其分配数据df.loc[[],[]],或者将行连接到DataFrame并设置最后的索引DataFrame?或者,使用列表或dict在从文件中读取数据时存储数据是否更快,然后DataFrame从中创建数据?是否有更多的pythonic或更快的选项?
示例文本文件:
A = 1
B = 1
C data
0 1
1 2
A = 1
B = 2
C data
1 3
2 4
A = 2
B = 1
C data
0 5
2 6
Run Code Online (Sandbox Code Playgroud)
输出数据框架:
A B C data
1 1 0 1
1 2
1 2 1 3
2 4
2 1 0 5
2 6
Run Code Online (Sandbox Code Playgroud)
1月18日更新:这与如何使用Python解析复杂文本文件有关?我还写了一篇博客文章,解释了如何向初学者解析复杂文件.
在pandas中按元素查找元素是一项昂贵的操作,因此按索引进行对齐.我会将所有内容读入数组,创建值的DataFrame,然后直接设置层次结构索引.如果你可以避免追加或查找,通常要快得多.
下面是一个示例结果,假设您有一个数据集2-D数组,其中包含所有内容:
In [106]: dataset
Out[106]:
array([[1, 1, 0, 1],
[1, 1, 1, 2],
[1, 2, 1, 3],
[1, 2, 2, 4],
[2, 1, 0, 5],
[2, 1, 2, 6]])
In [107]: pd.DataFrame(dataset,columns=['A','B','C', 'data']).set_index(['A', 'B', 'C'])
...:
Out[107]:
data
A B C
1 1 0 1
1 2
2 1 3
2 4
2 1 0 5
2 6
In [108]: data_values = dataset[:, 3]
...: data_index = pd.MultiIndex.from_arrays( dataset[:,:3].T, names=list('ABC'))
...: pd.DataFrame(data_values, columns=['data'], index=data_index)
...:
Out[108]:
data
A B C
1 1 0 1
1 2
2 1 3
2 4
2 1 0 5
2 6
In [109]: %timeit pd.DataFrame(dataset,columns=['A','B','C', 'data']).set_index(['A', 'B', 'C'])
%%timeit
1000 loops, best of 3: 1.75 ms per loop
In [110]: %%timeit
...: data_values = dataset[:, 3]
...: data_index = pd.MultiIndex.from_arrays( dataset[:,:3].T, names=list('ABC'))
...: pd.DataFrame(data_values, columns=['data'], index=data_index)
...:
1000 loops, best of 3: 642 µs per loop
Run Code Online (Sandbox Code Playgroud)
小智 5
解析文本文件将是处理开销的主要部分.
如果速度是主要问题,我建议使用pickle或shelve将DataFrame对象存储在二进制文件中以备使用.
如果由于任何原因需要使用文本文件,可以编写单独的模块以在格式之间进行转换.
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |