wai*_*kuo 6 python dataframe pandas
我总结一下DataFrame,它返回一个Series:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([[1, 2, 3], [2, 3, 3]], columns=['a', 'b', 'c'])
In [3]: df
Out[3]:
a b c
0 1 2 3
1 2 3 3
In [4]: s = df.sum()
In [5]: type(s)
Out[5]: pandas.core.series.Series
Run Code Online (Sandbox Code Playgroud)
我知道我可以DataFrame通过这种方式构建一个新的Series.但是,还有更"丑陋"的方式吗?
通常不仅需要将列的总和转换为数据帧,而且还需要转置结果数据帧。还有一种方法可以做到这一点:
df.sum().to_frame().transpose()
Run Code Online (Sandbox Code Playgroud)
我要继续说......"不",我不认为有直接的方法去做,pandastic方式(和pythonic一样)是明确的:
pd.DataFrame(df.sum(), columns=['sum'])
Run Code Online (Sandbox Code Playgroud)
或者,更优雅地,使用字典(请注意,这会复制求和数组):
pd.DataFrame({'sum': df.sum()})
Run Code Online (Sandbox Code Playgroud)
正如@root所说,使用起来更快:
pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
Run Code Online (Sandbox Code Playgroud)
(正如蟒蛇国家的禅宗:"实用性胜过纯洁",所以如果你关心这个时候,请使用这个).
然而,也许最常见的方式就是使用该系列!:)
.
一些%timeits代表你的小例子:
In [11]: %timeit pd.DataFrame(df.sum(), columns=['sum'])
1000 loops, best of 3: 356 us per loop
In [12]: %timeit pd.DataFrame({'sum': df.sum()})
1000 loops, best of 3: 462 us per loop
In [13]: %timeit pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
1000 loops, best of 3: 205 us per loop
Run Code Online (Sandbox Code Playgroud)
并稍微大一点:
In [21]: df = pd.DataFrame(np.random.randn(100000, 3), columns=list('abc'))
In [22]: %timeit pd.DataFrame(df.sum(), columns=['sum'])
100 loops, best of 3: 7.99 ms per loop
In [23]: %timeit pd.DataFrame({'sum': df.sum()})
100 loops, best of 3: 8.3 ms per loop
In [24]: %timeit pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
100 loops, best of 3: 2.47 ms per loop
Run Code Online (Sandbox Code Playgroud)
您可以使用agg诸如 之类的简单操作sum,看看它有多紧凑:
df.agg(['sum'])
Run Code Online (Sandbox Code Playgroud)
然而,这可能会带来显着的性能成本。当较短的执行时间比较短的代码行更重要时,请考虑其他解决方案。
小智 5
我不确定早期版本,但从 pandas 0.18.1 开始,可以使用pandas.Series.to_frame方法。
import pandas as pd
df = pd.DataFrame([[1, 2, 3], [2, 3, 3]], columns=['a', 'b', 'c'])
s = df.sum().to_frame(name='sum')
type(s)
>>> pandas.core.frame.DataFrame
Run Code Online (Sandbox Code Playgroud)
该name参数是可选的,定义列名。
| 归档时间: |
|
| 查看次数: |
2448 次 |
| 最近记录: |