Python 如何获取数据帧的行数?
我试图通过Pandas获得数据帧df的行数,下面是我的代码 方法1: 方法2: 这两个代码段都给出了以下错误: TypeError:不支持+:“instancemethod”和“int”的操作数类型Python 如何获取数据帧的行数?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图通过Pandas获得数据帧df的行数,下面是我的代码 方法1: 方法2: 这两个代码段都给出了以下错误: TypeError:不支持+:“instancemethod”和“int”的操作数类型 我做错了什么?对于数据帧df,可以使用以下任一选项: len(测向索引) df.shape[0] df[df.columns[0]].count()(速度最慢,但避免在第一列中计算NaN值) 复制绘图的代码: 将numpy导入为np 作为pd进口熊猫 导入性能图 perfplot.save(
我做错了什么?对于数据帧
df
,可以使用以下任一选项:
len(测向索引)
df.shape[0]
(速度最慢,但避免在第一列中计算NaN值)df[df.columns[0]].count()
复制绘图的代码:
将numpy导入为np
作为pd进口熊猫
导入性能图
perfplot.save(
“out.png”,
setup=lambda n:pd.数据帧(np.arange(n*3).重塑(n,3)),
n_范围=[2**k表示范围(25)中的k],
果仁=[
λdf:len(测向指数),
lambda df:df.shape[0],
lambda df:df[df.columns[0]].count(),
],
labels=[“len(df.index)”,“df.shape[0],“df[df.columns[0]]].count()”,
xlabel=“行数”,
)
使用len(df)
:-)
\uuu len\uu()
以“返回索引长度”记录
定时信息,设置方式与中相同:
[7]中的:时间长度(df.index)
1000000个循环,最好3个:每个循环248纳秒
In[8]:timeit len(df)
1000000个循环,最佳3个:每个循环573纳秒
由于有一个额外的函数调用,可以正确地说,它比直接调用
len(df.index)
要慢一些。但在大多数情况下,这并不重要。我发现len(df)
非常可读。除了前面的答案之外,您可以使用df.axes
获取具有行和列索引的元组,然后使用len()
函数:
total_rows = len(df.axes[0])
total_cols = len(df.axes[1])
假设
df
是您的数据帧,那么:
count_row = df.shape[0] # Gives number of rows
count_col = df.shape[1] # Gives number of columns
或者更简洁地说
r, c = df.shape
TL;博士
简洁、清晰、干净:使用len(df)
len()
是您的朋友,它可以作为len(df)
用于行计数
或者,您可以通过df.index
访问所有行,通过df.columns
访问所有列,由于您可以使用len(anyList)
获取列表的计数,请使用
len(df.index)
获取行数,len(df.columns)
获取列计数
或者,您可以使用df.shape
返回行数和列数。如果要访问行数,请仅使用df.shape[0]
。对于列数,只使用:df.shape[1]
我从背景中了解到熊猫,我发现熊猫在选择行或列时更复杂
我不得不与它搏斗一段时间,然后我找到了一些方法来处理:
获取列数:
len(df.columns)
## Here:
# df is your data.frame
# df.columns returns a string. It contains column's titles of the df.
# Then, "len()" gets the length of it.
获取行数:
len(df.index) # It's similar.
对于dataframe df,在浏览数据时使用的打印逗号格式行计数:
def nrow(df):
print("{:,}".format(df.shape[0]))
例如:
nrow(my_df)
12,456,789
row_count = (
pd.DataFrame(np.random.rand(3,4))
.reset_index()
.pipe(len)
)
…以…为基础
之所以len(df)
或len(df.index)
比df.shape[0]
快:
看看代码。df.shape是一个@属性
,它运行一个调用len
两次的数据帧方法
df.shape??
Type: property
String form: <property object at 0x1127b33c0>
Source:
# df.shape.fget
@property
def shape(self):
"""
Return a tuple representing the dimensionality of the DataFrame.
"""
return len(self.index), len(self.columns)
<代码> LeN(DF.index)将比<代码> LEN(DF)略微快一些,因为它有一个更少的函数调用,但总是比
df.pipe(len)
例如:
nrow(my_df)
12,456,789
row_count = (
pd.DataFrame(np.random.rand(3,4))
.reset_index()
.pipe(len)
)
如果您不想在len()
函数中放入长语句,这可能会很有用
你可以用\uuu len\uuu()
来代替,但是\uu len\uuu()
看起来有点奇怪
如何获取数据帧的行数?
此表总结了您希望在数据帧(或系列,完整性)中计数的不同情况,以及推荐的方法
脚注
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
数据帧的行计数:len(df)
,df.shape[0]
,或len(df.index)
比较恒定时间操作的性能似乎很愚蠢,尤其是当差异处于“认真地说,不要担心”的水平时。但这似乎是其他答案的一种趋势,所以我也在做同样的事情以确保完整性
在上述三种方法中,len(df.index)
(如其他答案所述)是最快的
注意
- 以上所有方法都是常量时间操作,因为它们是简单的属性查找
(类似于df.shape
)是返回ndarray.shape
元组的属性。例如,(#行,#列)
返回此处示例的df.shape
(8,2)
df.shape[1]
,len(df.columns)
类似于len(df.index)
,len(df.columns)
是两种方法中速度更快的一种(但需要更多的字符才能键入)
序列的行计数:len(s)
,s.size
,len(s.index)
s.size
和len(s.index)
是
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
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
df.shape[1]
# 2
len(df.columns)
# 2
len(s)
# 5
s.size
# 5
len(s.index)
# 5
df.count()
A 5
B 3
dtype: int64
s.count()
# 3
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
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
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
*dataframe name*.tails(1)
row = df.shape[0], col = df.shape[1]
#import the data frame. Extention could be different as csv,xlsx or etc.
data_fr = pd.read_csv('data.csv')
#print the number of rows
nu_rows = data_fr.shape[0]
print(nu_rows)