панды Python как подсчитать количество записей или строк в таблице данных
очевидно, новый для панд. Как я могу просто подсчитать количество записей в фрейме данных.
Я бы подумал, что такая простая вещь, как это, сделает это, и я даже не могу найти ответ в поисках...наверное, потому, что это слишком просто.
cnt = df.count
print cnt
приведенный выше код фактически просто печатает весь df
4 ответов
С уважением к вашему вопросу... считая одно поле? Я решил задать вопрос, но надеюсь, это поможет...
скажем, у меня есть следующий DataFrame
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.normal(0, 1, (5, 2)), columns=["A", "B"])
вы можете сосчитать один столбец по
df.A.count()
#or
df['A'].count()
оба оценивают до 5.
классная вещь (или одна из многих w.r.т. pandas
) это если у вас есть NA
значения, count принимает это во внимание.
так если бы я сделал
df['A'][1::2] = np.NAN
df.count()
результат будет будь
A 3
B 5
получить количество строк в таблице данных:
df.shape[0]
(и df.shape[1]
получить количество столбцов).
в качестве альтернативы вы можете использовать
len(df)
или
len(df.index)
(и len(df.columns)
для столбцов)
shape
является более универсальным и более удобным, чем len()
, специально для интерактивной работы (просто нужно добавить в конце), но len
немного быстрее (см. Также этот ответ).
избежать: count()
потому что он возвращает количество наблюдений не-NA / null над запрошенной осью
len(df.index)
быстрее
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(24).reshape(8, 3),columns=['A', 'B', 'C'])
df['A'][5]=np.nan
df
# Out:
# A B C
# 0 0 1 2
# 1 3 4 5
# 2 6 7 8
# 3 9 10 11
# 4 12 13 14
# 5 NaN 16 17
# 6 18 19 20
# 7 21 22 23
%timeit df.shape[0]
# 100000 loops, best of 3: 4.22 µs per loop
%timeit len(df)
# 100000 loops, best of 3: 2.26 µs per loop
%timeit len(df.index)
# 1000000 loops, best of 3: 1.46 µs per loop
df.__len__
это просто вызов len(df.index)
import inspect
print(inspect.getsource(pd.DataFrame.__len__))
# Out:
# def __len__(self):
# """Returns length of info axis, but here we use the index """
# return len(self.index)
почему вы не должны использовать count()
df.count()
# Out:
# A 7
# B 8
# C 8
просто row_num = df.shape[0] # дает количество строк, вот пример:
import pandas as pd
import numpy as np
In [322]: df = pd.DataFrame(np.random.randn(5,2), columns=["col_1", "col_2"])
In [323]: df
Out[323]:
col_1 col_2
0 -0.894268 1.309041
1 -0.120667 -0.241292
2 0.076168 -1.071099
3 1.387217 0.622877
4 -0.488452 0.317882
In [324]: df.shape
Out[324]: (5, 2)
In [325]: df.shape[0] ## Gives no. of rows/records
Out[325]: 5
In [326]: df.shape[1] ## Gives no. of columns
Out[326]: 2
пример Nan выше пропускает одну часть, что делает его менее общим. Для этого более "обобщенно" используйте df['column_name'].value_counts()
Это даст вам количество каждого значения в этом столбце.
d=['A','A','A','B','C','C'," " ," "," "," "," ","-1"] # for simplicity
df=pd.DataFrame(d)
df.columns=["col1"]
df["col1"].value_counts()
5
A 3
C 2
-1 1
B 1
dtype: int64
"""len(df) give you 12, so we know the rest must be Nan's of some form, while also having a peek into other invalid entries, especially when you might want to ignore them like -1, 0 , "", also"""