如何获取panda数据帧df的行数?
当前回答
len(df.index)将是列出的所有方法中工作最快的
其他回答
除了前面的答案之外,您还可以使用df.axes获取具有行和列索引的元组,然后使用len()函数:
total_rows = len(df.axes[0])
total_cols = len(df.axes[1])
找出数据帧中行数的另一种方法是pandas.Index.size,我认为这是最可读的变体。
请注意,正如我对公认答案的评论,
疑似pandas.Index.size实际上比len(df.Index)更快,但在我的计算机上告诉的是相反的情况(每个循环大约慢150 ns)。
如果要在链接操作的中间获取行数,可以使用:
df.pipe(len)
例子:
row_count = (
pd.DataFrame(np.random.rand(3,4))
.reset_index()
.pipe(len)
)
如果您不想在len()函数中放一个长语句,这可能很有用。
您可以改用__len__(),但__len__)看起来有点奇怪。
假设df是您的数据帧,那么:
count_row = df.shape[0] # Gives number of rows
count_col = df.shape[1] # Gives number of columns
或者更简洁地说,
r, c = df.shape
如何获取Pandas DataFrame的行计数?
本表总结了您希望在DataFrame(或Series,为完整性起见)中计算某些内容的不同情况,以及推荐的方法。
脚注DataFrame.count将每个列的计数作为一个系列返回,因为非空计数因列而异。DataFrameGroupBy.size返回一个系列,因为同一组中的所有列共享相同的行计数。DataFrameGroupBy.count返回一个DataFrame,因为同一组中不同列的非空计数可能不同。要获取特定列的分组非空计数,请使用df.groupby(…)['x'].count(),其中“x”是要计数的列。
最小代码示例
下面,我展示了上表中描述的每种方法的示例。首先,设置-
df = pd.DataFrame({
'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()
df
A B
0 a x
1 a x
2 b NaN
3 b x
4 c NaN
s
0 x
1 x
2 NaN
3 x
4 NaN
Name: B, dtype: object
DataFrame的行计数:len(df)、df.shape[0]或len(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
比较恒定时间操作的性能似乎很愚蠢,尤其是当差异达到“认真地说,不要担心”的程度时。但这似乎是其他答案的一种趋势,所以为了完整性,我也这么做。
在上述三种方法中,len(df.index)(如其他答案中所述)是最快的。
笔记上述所有方法都是常量时间操作,因为它们是简单的属性查找。df.shape(类似于ndarray.shape)是一个返回元组(#Rows,#Cols)的属性。例如,对于这里的示例,df.shape返回(8,2)。
DataFrame的列计数:df.shape[1],len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
与len(df.index)类似,len(df.columns)是两种方法中速度较快的一种(但需要更多字符才能输入)。
系列的行计数:len(s)、s.size、len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size和len(s.index)在速度方面大致相同。但我推荐len(df)。
笔记size是一个属性,它返回元素的数量(=count任何系列的行数)。DataFrames还定义了一个大小属性返回与df.shape[0]*df.shape[1]相同的结果。
非空行计数:DataFrame.Count和Series.Count
这里描述的方法只计算非空值(意味着忽略NaN)。
调用DataFrame.count将返回每列的非NaN计数:
df.count()
A 5
B 3
dtype: int64
对于“系列”,请使用“系列计数”以产生类似效果:
s.count()
# 3
分组行计数:GroupBy.size
对于DataFrames,使用DataFrameGroupBy.size计算每个组的行数。
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
同样,对于Series,您将使用SeriesGroupBy.size。
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
在这两种情况下,都会返回一个Series。这对DataFrames也有意义,因为所有组共享相同的行计数。
按组非空行计数:GroupBy.Count
与上面类似,但使用GroupBy.count,而不是GroupBy.size。请注意,size始终返回一个Series,而count如果在特定列上调用,则返回一个Serial,否则返回一个DataFrame。
以下方法返回相同的结果:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
同时,伯爵,我们有
df.groupby('A').count()
B
A
a 2
b 1
c 0
…对整个GroupBy对象调用。,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
在特定列上调用。
推荐文章
- 如何删除Python中的前导空白?
- python中的assertEquals和assertEqual
- 如何保持Python打印不添加换行符或空格?
- 为什么Python的无穷散列中有π的数字?
- Python 3.7数据类中的类继承
- 如何在PyTorch中初始化权重?
- 计数唯一的值在一列熊猫数据框架像在Qlik?
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?