什么是 Python 熊猫等价于 R 函数,如 str()、 sum()和 head() ?

我只知道 describe()函数。还有其他类似于 str()summary()head()的函数吗?

57429 次浏览
  • summary() ~ describe()
  • head() ~ head()

我不确定 str()是否等价。

我对 R 了解不多,但这里有一些线索:

str =>

对于函数,你可以在数据集上使用 dir () ,dir ()会给你所有的方法,所以也许这不是你想要的..。

summary => describe.

查看自定义结果的参数。

head => your can use head(), or use slices.

就像你已经做的那样。获取名为 ds ds[:10]的数据集的前10行,与尾 ds[:-10]相同

这提供了类似于 R 的 str()的输出。它提供唯一的值而不是初始值。

def rstr(df): return df.shape, df.apply(lambda x: [x.unique()])


print(rstr(iris))


((150, 5), sepal_length    [[5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.4, 4.8, 4.3,...
sepal_width     [[3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 2.9, 3.7,...
petal_length    [[1.4, 1.3, 1.5, 1.7, 1.6, 1.1, 1.2, 1.0, 1.9,...
petal_width     [[0.2, 0.4, 0.3, 0.1, 0.5, 0.6, 1.4, 1.5, 1.3,...
class            [[Iris-setosa, Iris-versicolor, Iris-virginica]]
dtype: object)

熊猫提供了广泛的 与 R/R 库的比较。最明显的区别是 R 更喜欢函数式编程,而 Pandas 是面向对象的,以数据框架为关键对象。R 和 Python 之间的另一个区别是 Python 在0开始数组,而 R 在1开始。

R               | Pandas
-------------------------------
summary(df)     | df.describe()
head(df)        | df.head()
dim(df)         | df.shape
slice(df, 1:10) | df.iloc[:9]

对于与 R 中的 str()函数等价的 Python,我使用方法 dtypes。这将为每个列提供数据类型。

In [22]: df2.dtypes
Out[22]:
Survived      int64
Pclass        int64
Sex          object
Age         float64
SibSp         int64
Parch         int64
Ticket       object
Fare        float64
Cabin        object
Embarked     object
dtype: object

在大熊猫中,info()方法创造了一个非常类似的输出,就像 R 的 str():

> str(train)
'data.frame':   891 obs. of  13 variables:
$ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
$ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
$ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
$ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
$ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
$ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
$ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
$ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
$ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
$ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
$ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
$ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
$ Child      : num  0 0 0 0 0 NA 0 1 0 1 ...




train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

我仍然喜欢 str(),因为它列出了一些例子。info的一个令人困惑的方面是它的行为取决于一些环境设置,比如 pandas.options.display.max_info_columns

我认为最好的替代方法是使用其他一些参数调用 info,这些参数将强制执行一个固定的行为:

df.info(null_counts=True, verbose=True)

还有你的其他功能:

summary(df)     | df.describe()
head(df)        | df.head()
dim(df)         | df.shape

我不认为有一个直接等同于 str()函数(或 glimpse()dplyr)熊猫给出相同的信息。我认为等价的函数必须显示以下内容:

  1. 数据框架中的行和列数
  2. 所有列的名称
  3. 存储在每列中的数据类型
  4. 快速查看每列中的前几个值

基于@jjurach 的回答,我编写了一个 helper 函数,作为 R strglimpse函数的替身,以快速获得 DataFrames 的概述。下面是带有示例的代码:

import pandas as pd
import random


# an example dataframe to test the helper function
example_df = pd.DataFrame({
"var_a": [random.choice(["foo","bar"]) for i in range(20)],
"var_b": [random.randint(0, 1) for i in range(20)],
"var_c": [random.random() for i in range(20)]
})


# helper function for viewing pandas dataframes
def glimpse_pd(df, max_width=76):


# find the max string lengths of the column names and dtypes for formatting
_max_len = max([len(col) for col in df])
_max_dtype_label_len = max([len(str(df[col].dtype)) for col in df])


# print the dimensions of the dataframe
print(f"{type(df)}:  {df.shape[0]} rows of {df.shape[1]} columns")


# print the name, dtype and first few values of each column
for _column in df:


_col_vals = df[_column].head(max_width).to_list()
_col_type = str(df[_column].dtype)


output_col = f"{_column}:".ljust(_max_len+1, ' ')
output_dtype = f" {_col_type}".ljust(_max_dtype_label_len+3, ' ')


output_combined = f"{output_col} {output_dtype} {_col_vals}"


# trim the output if too long
if len(output_combined) > max_width:
output_combined = output_combined[0:(max_width-4)] + " ..."


print(output_combined)

运行该函数将返回以下输出:

glimpse_pd(example_df)
<class 'pandas.core.frame.DataFrame'>:  20 rows of 3 columns
var_a:  object    ['foo', 'bar', 'foo', 'foo', 'bar', 'bar', 'foo', 'bar ...
var_b:  int64     [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, ...
var_c:  float64   [0.7346545694885085, 0.7776711488732364, 0.49558114902 ...