我喜欢在pandas中使用.head()
和.tail()
函数来环境显示一定数量的行(有时我想要更少,有时我想要更多!)。但有没有办法用DataFrame的列做到这一点?
是的,我知道我可以更改显示选项,如:
pd.set_option('display.max_columns', 20)
但是这太过于笨拙而无法随时更改,无论如何,它只会取代.head()
功能,而不会取代.tail()
功能。
我也知道这可以使用访问器来完成:
yourDF.iloc[:,:20]
模拟.head(20)和yourDF.iloc[:,-20:]
来模拟.tail(20)。
它可能看起来像是一小段代码,但说实话,它并不像我使用.head()那样直观或快捷。
这样的命令是否存在?我找不到一个!
答案 0 :(得分:12)
不,Pandas不提供这样的方法,但很容易自己制作这些方法:
import pandas as pd
def front(self, n):
return self.iloc[:, :n]
def back(self, n):
return self.iloc[:, -n:]
pd.DataFrame.front = front
pd.DataFrame.back = back
df = pd.DataFrame(np.random.randint(10, size=(4,10)))
现在所有 DataFrame都拥有这些方法:
In [272]: df.front(4)
Out[272]:
0 1 2 3
0 2 5 2 8
1 9 9 1 3
2 7 0 7 4
3 8 3 9 2
In [273]: df.back(3)
Out[273]:
7 8 9
0 3 2 7
1 9 9 4
2 5 7 1
3 3 2 5
In [274]: df.front(4).back(2)
Out[274]:
2 3
0 2 8
1 1 3
2 7 4
3 9 2
如果您将代码放在实用程序模块中,例如utils_pandas.py
,那么您可以使用import语句激活它:
import utils_pandas
答案 1 :(得分:2)
将其转置以使用头部并返回
df.T.head().T
避免索引切片或自定义方法。
答案 2 :(得分:1)
最近的模拟,你可以把它放在一个函数中:
// For "43.3"
array(3) {
[0]=>
string(4) "43.3" // whole match
[1]=>
string(2) "43" // first capturing group
[2]=>
string(1) "3" // second capturing group
}
// For "1."
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
// For "12345"
array(2) {
[0]=>
string(5) "12345"
[1]=>
string(5) "12345"
}
答案 3 :(得分:0)
你可以使用df.col.head(n)来做你想做的事情......见下面的例子,
df = pd.DataFrame({'a': [i for i in range(101)],
'b': [i for i in range(101)]})
df.a.head(4)
Out[37]:
0 0
1 1
2 2
3 3
Name: a, dtype: int64
答案 4 :(得分:0)
您可以将数字放在方括号内,该数字将显示n个第一个/最后一个数字 数据框中的行数。
df.head(10)
您甚至可以输入比默认数字小的数字(如果需要)。
df.head(2)