data.csv和student_data数据在文章底部
方法讲解
read_csv
读取csv文件
例子:
import pands as pd
file = 'data.csv'
# df是一个DataFrame结构
df = pd.read_csv(file, header=None)
其中,header=None代表数据源没有标题,从第一行开始读取,若不写header=None则默认第一行为列名,在数据操作时会忽略第一行
dtypes
获取数据的类型
例子:
data = pd.read_csv("data.csv")
print(data.dtypes)
输出如下:
花萼长度 float64
花萼宽度 float64
花瓣长度 float64
花瓣宽度 float64
种类 object
dtype: object
head
获取数据头部,默认第一行为标题,附加前五行,总共六行。也可以指定输出前多少行,除标题外,每行数据头部会显示行号。
例子:
data = pd.read_csv("data.csv")
print(data.head())
print(data.head(3))
输出如下:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
tail
获取数据头部,默认第一行为标题,附加最后五行,总共六行。也可以指定输出最后多少行,除标题外,每行数据头部会显示下标(该下标为去掉头部从0开始的下标)。
data = pd.read_csv("data.csv")
print(data.tail())
print(data.tail(3))
输出如下:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
145 6.7 3.0 5.2 2.3 Iris-virginica
146 6.3 2.5 5.0 1.9 Iris-virginica
147 6.5 3.0 5.2 2.0 Iris-virginica
148 6.2 3.4 5.4 2.3 Iris-virginica
149 5.9 3.0 5.1 1.8 Iris-virginica
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
147 6.5 3.0 5.2 2.0 Iris-virginica
148 6.2 3.4 5.4 2.3 Iris-virginica
149 5.9 3.0 5.1 1.8 Iris-virginica
columns
获取数据列名
例子:
import pandas as pd
data = pd.read_csv("data.csv")
# 包含dtype
print(data.columns)
# 单输出列名,list类型
print(data.columns.tolist())
输出如下:
Index(['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度', '种类'], dtype='object')
['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度', '种类']
shape
获取数据样本个数(不算头部)与列数
例子:
data = pd.read_csv("data.csv")
print(data.shape)
输出如下:
(150, 5)
获取指定列数据
可以获取到指定列的所有数据
例子:
# 获取某一列数据
a = data["花瓣长度"]
# 获取某几列数据
b = data[["花瓣长度", "花瓣宽度"]]
print(a)
print(b)
输出如下:
0 1.4
1 1.4
2 1.3
3 1.5
4 1.4
5 1.7
6 1.4
7 1.5
8 1.4
9 1.5
10 1.5
11 1.6
...
141 5.1
142 5.1
143 5.9
144 5.7
145 5.2
146 5.0
147 5.2
148 5.4
149 5.1
Name: 花瓣长度, Length: 150, dtype: float64
花瓣长度 花瓣宽度
0 1.4 0.2
1 1.4 0.2
2 1.3 0.2
3 1.5 0.2
4 1.4 0.2
5 1.7 0.4
6 1.4 0.3
.. ... ...
140 5.6 2.4
141 5.1 2.3
142 5.1 1.9
143 5.9 2.3
144 5.7 2.5
145 5.2 2.3
146 5.0 1.9
147 5.2 2.0
148 5.4 2.3
149 5.1 1.8
[150 rows x 2 columns]
loc
读取指定行数的值
例子:
import pands as pd
file = 'data.csv'
data = pd.read_csv(file)
# 获取0下标对应的数据,会显示标题和dtype
a = data.loc[0]
# 只显示数据
b = data.loc[0].values
# 获取下标3~下标6的数据
c = data.loc[3:6].values
# 获取下标2 、 5 、 10 的数据
d = data.loc[[2, 5 ,10]].values
# 提取数据的0~100行的值,包含第100行(header=None时调用才不会报错)
# e = data.loc[0:100].values
# 提取数据的0~100行的第四列的值(header=None时调用才不会报错)
# f = data.loc[0:100, 4].values
# 提取数据的0~100行的第二、四列的值(header=None时调用才不会报错)
# g = data.loc[0:100, [2,4]].values
print(a)
print(b)
print(c)
print(d)
输出如下:
花萼长度 5.1
花萼宽度 3.5
花瓣长度 1.4
花瓣宽度 0.2
种类 Iris-setosa
Name: 0, dtype: object
[5.1 3.5 1.4 0.2 'Iris-setosa']
[[4.6 3.1 1.5 0.2 'Iris-setosa']
[5.0 3.6 1.4 0.2 'Iris-setosa']
[5.4 3.9 1.7 0.4 'Iris-setosa']
[4.6 3.4 1.4 0.3 'Iris-setosa']]
[[4.7 3.2 1.3 0.2 'Iris-setosa']
[5.4 3.9 1.7 0.4 'Iris-setosa']
[5.4 3.7 1.5 0.2 'Iris-setosa']]
iloc
读取指定行数的值,与loc用法相似
例子:
import pands as pd
file = 'data.csv'
df = pd.read_csv(file, header=None)
sort_values
对数据中的列进行排序,默认升序
例子:
# 数据的某一列进行排序,inplace=True代表排序后的结果赋予给data对象,默认为False,生产一个新的对象
data.sort_values("花萼长度", inplace=True)
# 数据中的列进行降序排列,ascending = False代表降序,ascending默认 = True
a = data.sort_values("花萼长度", ascending=False)
print(data["花萼长度"])
print("-"*80)
print(data)
print("-"*80)
print(a)
输出如下:
13 4.3
42 4.4
38 4.4
8 4.4
41 4.5
...
122 7.7
118 7.7
117 7.7
135 7.7
131 7.9
Name: 花萼长度, Length: 150, dtype: float64
--------------------------------------------------------------------------------
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
13 4.3 3.0 1.1 0.1 Iris-setosa
42 4.4 3.2 1.3 0.2 Iris-setosa
38 4.4 3.0 1.3 0.2 Iris-setosa
8 4.4 2.9 1.4 0.2 Iris-setosa
41 4.5 2.3 1.3 0.3 Iris-setosa
.. ... ... ... ... ...
130 7.4 2.8 6.1 1.9 Iris-virginica
105 7.6 3.0 6.6 2.1 Iris-virginica
122 7.7 2.8 6.7 2.0 Iris-virginica
118 7.7 2.6 6.9 2.3 Iris-virginica
117 7.7 3.8 6.7 2.2 Iris-virginica
135 7.7 3.0 6.1 2.3 Iris-virginica
131 7.9 3.8 6.4 2.0 Iris-virginica
[150 rows x 5 columns]
--------------------------------------------------------------------------------
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
131 7.9 3.8 6.4 2.0 Iris-virginica
135 7.7 3.0 6.1 2.3 Iris-virginica
117 7.7 3.8 6.7 2.2 Iris-virginica
118 7.7 2.6 6.9 2.3 Iris-virginica
122 7.7 2.8 6.7 2.0 Iris-virginica
105 7.6 3.0 6.6 2.1 Iris-virginica
.. ... ... ... ... ...
22 4.6 3.6 1.0 0.2 Iris-setosa
41 4.5 2.3 1.3 0.3 Iris-setosa
38 4.4 3.0 1.3 0.2 Iris-setosa
42 4.4 3.2 1.3 0.2 Iris-setosa
8 4.4 2.9 1.4 0.2 Iris-setosa
13 4.3 3.0 1.1 0.1 Iris-setosa
[150 rows x 5 columns]
reset_index
重置index值,一般用于排序之后
例子:
# 查看排在前十的花瓣长度
a = data.sort_values("花瓣长度",ascending=False)[0:10]
# 把排序后的数据重新生成index,drop表示是否删除原来的index,默认为True
b = a.reset_index(drop=True)
print(a)
print(b)
输出如下:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
118 7.7 2.6 6.9 2.3 Iris-virginica
122 7.7 2.8 6.7 2.0 Iris-virginica
117 7.7 3.8 6.7 2.2 Iris-virginica
105 7.6 3.0 6.6 2.1 Iris-virginica
131 7.9 3.8 6.4 2.0 Iris-virginica
107 7.3 2.9 6.3 1.8 Iris-virginica
130 7.4 2.8 6.1 1.9 Iris-virginica
109 7.2 3.6 6.1 2.5 Iris-virginica
135 7.7 3.0 6.1 2.3 Iris-virginica
100 6.3 3.3 6.0 2.5 Iris-virginica
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类
0 7.7 2.6 6.9 2.3 Iris-virginica
1 7.7 2.8 6.7 2.0 Iris-virginica
2 7.7 3.8 6.7 2.2 Iris-virginica
3 7.6 3.0 6.6 2.1 Iris-virginica
4 7.9 3.8 6.4 2.0 Iris-virginica
5 7.3 2.9 6.3 1.8 Iris-virginica
6 7.4 2.8 6.1 1.9 Iris-virginica
7 7.2 3.6 6.1 2.5 Iris-virginica
8 7.7 3.0 6.1 2.3 Iris-virginica
9 6.3 3.3 6.0 2.5 Iris-virginica
apply
自定义函数
例子:
# 使用apply去获取第100行数据
def get_hundred_row(petal_data):
return petal_data.loc[99]
# 直接传递参数来获取第50行数据
def get_fifty_row(petal_data):
return petal_data.loc[49]
hundred_row = data.apply(get_hundred_row)
fifty_row = get_fifty_row(data)
print(hundred_row)
print('-'*80)
print(fifty_row)
输出如下:
花萼长度 5.7
花萼宽度 2.8
花瓣长度 4.1
花瓣宽度 1.3
种类 Iris-versicolor
dtype: object
--------------------------------------------------------------------------------
花萼长度 5
花萼宽度 3.3
花瓣长度 1.4
花瓣宽度 0.2
种类 Iris-setosa
Name: 49, dtype: object
apply和直接调用函数的区别
普通的函数调用是用数据去执行函数中的语句,而apply则是用数据的每一行单独去执行函数中的语句,并返回一个总体值。
例子:
df1 = pd.DataFrame({
"语文":[60,72,None,80],
"数学":[70,None,58,80],
"英语":[80,20,50,60]
})
# 想要获取每一列的空元素个数
def not_null_count(column):
column_null = pd.isnull(column)
null = column[column_null]
return len(null)
a = not_null_count(df1["语文"])
b = not_null_count(df1["数学"])
c = not_null_count(df1["英语"])
# df1使用apply函数,直接把df1中的每一列分别执行not_null_count函数中的代码
column_null_count = df1.apply(not_null_count)
print(df1)
print('-'*80)
print(a)
print('-'*80)
print(b)
print('-'*80)
print(c)
print('-'*80)
print(column_null_count)
输出如下:
语文 数学 英语
0 60.0 70.0 80
1 72.0 NaN 20
2 NaN 58.0 50
3 80.0 80.0 60
--------------------------------------------------------------------------------
1
--------------------------------------------------------------------------------
1
--------------------------------------------------------------------------------
0
--------------------------------------------------------------------------------
语文 1
数学 1
英语 0
dtype: int64
获取最大值和最小值和平均值
可以在获取到某一列后使用.max与.min来分别获取改列的最大值与最小值
例子:
a = data["花瓣长度"]
print(a.min())
print(a.max())语文 数学 英语
0 60.0 70.0 80
1 72.0 NaN 20
2 NaN 58.0 50
3 80.0 80.0 60
--------------------------------------------------------------------------------
1
--------------------------------------------------------------------------------
1
--------------------------------------------------------------------------------
0
--------------------------------------------------------------------------------
语文 1
数学 1
英语 0
dtype: int64
print(a.mean())
输出如下:
1.0
6.9
3.758666666666666
pivot_table
统计一个列和其他列关系的一个函数。
例子如下:
import numpy as np
import pandas as pd
data = pd.read_csv("data.csv")
# 获取各种类花瓣的平均长度,aggfunc的默认值是求平均数
mean_length = data.pivot_table(index="种类", values="花瓣长度", aggfunc=np.mean)
# 获取各种类花瓣的最大长度
max_length = data.pivot_table(index="种类", values="花瓣长度", aggfunc=np.max)
print(mean_length)
print(max_length)
输出如下:
花瓣长度
种类
Iris-setosa 1.464
Iris-versicolor 4.260
Iris-virginica 5.552
花瓣长度
种类
Iris-setosa 1.9
Iris-versicolor 5.1
Iris-virginica 6.9
Series
Series是Pandas中的一维数据结构,pandas读取到的数据一般都是DataFram结构,而Series则是DataFram的某一列数据。而Series的values属性,则是获取该Series中的值,会返回一个ndarray类型。
例子:
a = data['花瓣长度']
b = a.values
print(type(a))
print(type(b))
输出如下:
<class 'pandas.core.series.Series'>
<class 'numpy.ndarray'>
Series索引
可以自己创建一个Series,并通过对应的下标去检索对应的。
例子:
from pandas import Series
petal_length = data["花瓣长度"].values
petal_width = data["花瓣宽度"].values
# 创建一个Series对象,以花瓣宽度为下标,去取出对应的花瓣长度的值
series_custom = Series(petal_length, index=petal_width)
# 索引花瓣宽度为0.3和0.5对应的花瓣长度
a = series_custom[[0.3,0.5]]
print(a)
输出如下:
0.3 1.4
0.3 1.4
0.3 1.7
0.3 1.5
0.3 1.3
0.3 1.3
0.3 1.4
0.5 1.7
dtype: float64
数据批量运算
把一整列数据进行一个运算
例子:
a = data["花瓣长度"]
b = data["花瓣宽度"]
c = a * 10
d = a*b
data["花瓣最大面积"] = d
print(a)
print("-"*80)
print(b)
print("-"*80)
print(c)
print("-"*80)
print(d)
print("-"*80)
print(data)
输出如下:
0 1.4
1 1.4
2 1.3
3 1.5
...
146 5.0
147 5.2
148 5.4
149 5.1
Name: 花瓣长度, Length: 150, dtype: float64
--------------------------------------------------------------------------------
0 0.2
2 0.2
3 0.2
...
146 1.9
147 2.0
148 2.3
149 1.8
Name: 花瓣宽度, Length: 150, dtype: float64
--------------------------------------------------------------------------------
0 14.0
1 14.0
2 13.0
3 15.0
...
146 50.0
147 52.0
148 54.0
149 51.0
Name: 花瓣长度, Length: 150, dtype: float64
--------------------------------------------------------------------------------
0 0.28
1 0.28
2 0.26
3 0.30
...
133 7.65
146 9.50
147 10.40
148 12.42
149 9.18
Length: 150, dtype: float64
--------------------------------------------------------------------------------
花萼长度 花萼宽度 花瓣长度 花瓣宽度 种类 花瓣最大面积
0 5.1 3.5 1.4 0.2 Iris-setosa 0.28
1 4.9 3.0 1.4 0.2 Iris-setosa 0.28
2 4.7 3.2 1.3 0.2 Iris-setosa 0.26
3 4.6 3.1 1.5 0.2 Iris-setosa 0.30
.. ... ... ... ... ... ...
146 6.3 2.5 5.0 1.9 Iris-virginica 9.50
147 6.5 3.0 5.2 2.0 Iris-virginica 10.40
148 6.2 3.4 5.4 2.3 Iris-virginica 12.42
149 5.9 3.0 5.1 1.8 Iris-virginica 9.18
[150 rows x 6 columns]
isnull
判断某个元素是否为空,把每个元素都和NaN做个对比,生成一个和原数组对应新数组,如果元素为空,则在新数组对应位置的值为True,反之则为False
例子:
student_data = pd.read_csv('student_data.csv')
student_name = student_data["姓名"]
a = pd.isnull(student_name)
# 索引到对应位置的空元素
b = student_name[a]
c = len(b)
print(student_name)
print('-'*80)
print(a)
print('-'*80)
print(b)
print('-'*80)
print(c)
输出如下:
0 小明
1 小红
2 NaN
3 小黄
4 NaN
Name: 姓名, dtype: object
--------------------------------------------------------------------------------
0 False
1 False
2 True
3 False
4 True
Name: 姓名, dtype: bool
--------------------------------------------------------------------------------
2 NaN
4 NaN
Name: 姓名, dtype: object
--------------------------------------------------------------------------------
2
过滤空元素
如果存在空元素,则无法用数组去做某些运算。需要剔除其中的空元素。
例子:
student_age = student_data["年龄"]
# 存在空元素,无法进行sum求和
average_age = sum(student_age)/len(student_age)
age_is_null = pd.isnull(student_age)
# 把空元素的数据进行过滤
studen_age_no_null = student_age[age_is_null == False]
average_age_no_null = sum(studen_age_no_null)/len(studen_age_no_null)
print(student_age)
print('-'*80)
print(average_age)
print('-'*80)
print(age_is_null)
print('-'*80)
print(studen_age_no_null)
print('-'*80)
print(average_age_no_null)
输出如下:
0 5.0
1 NaN
2 4.0
3 5.0
4 5.0
Name: 年龄, dtype: float64
--------------------------------------------------------------------------------
nan
--------------------------------------------------------------------------------
0 False
1 True
2 False
3 False
4 False
Name: 年龄, dtype: bool
--------------------------------------------------------------------------------
0 5.0
2 4.0
3 5.0
4 5.0
Name: 年龄, dtype: float64
--------------------------------------------------------------------------------
4.75
student_data.csv数据:
学号,姓名,性别,年龄
1,小明,男,5
2,小红,女,
3,,男,4
4,小黄,男,5
5,,女,5
fillna
用指定值来取代NaN值
例子:
# python里面的None代表空
df1 = pd.DataFrame([[1,2,3],[None,None,2],[None,None,None],[8,8,None]])
# 把所有的NaN值都用100来填充,如果再加上一个入参inplace=True,直接修改df1,但不会有返回值
df2 = df1.fillna(100)
# 不同的列的NaN用不同的元素来填充
df3 = df1.fillna({0:100, 1:200, 2:300})
print(df1)
print(df2)
print(df3)
输出如下:
0 1 2
0 1.0 2.0 3.0
1 NaN NaN 2.0
2 NaN NaN NaN
3 8.0 8.0 NaN
0 1 2
0 1.0 2.0 3.0
1 100.0 100.0 2.0
2 100.0 100.0 100.0
3 8.0 8.0 100.0
0 1 2
0 1.0 2.0 3.0
1 100.0 200.0 2.0
2 100.0 200.0 300.0
3 8.0 8.0 300.0
dropna
删除指定的行或列
例子:
df1 = pd.DataFrame({
"语文":[60,72,None,80],
"数学":[70,None,58,80],
"英语":[80,20,50,60]
})
# 删除所有包含空元素的列
df2 = df1.dropna(axis=1)
# 若是某一行中语文这一列的数据为空,则删除这一行
df3 = df1.dropna(axis=0,subset=["语文"])
print(df1)
print('-'*80)
print(df2)
print('-'*80)
print(df3)
输出如下:
语文 数学 英语
0 60.0 70.0 80
1 72.0 NaN 20
2 NaN 58.0 50
3 80.0 80.0 60
--------------------------------------------------------------------------------
英语
0 80
1 20
2 50
3 60
--------------------------------------------------------------------------------
语文 数学 英语
0 60.0 70.0 80
1 72.0 NaN 20
3 80.0 80.0 60
获取某行某列的数据
例子:
df1 = pd.DataFrame({
"语文":[60,72,None,80],
"数学":[70,None,58,80],
"英语":[80,20,50,60]
})
branch = df1.loc[2, "英语"]
print(df1)
print('-'*80)
print(branch)
输出如下:
语文 数学 英语
0 60.0 70.0 80
1 72.0 NaN 20
2 NaN 58.0 50
3 80.0 80.0 60
--------------------------------------------------------------------------------
50
data.csv数据:
花萼长度,花萼宽度,花瓣长度,花瓣宽度,种类
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4.0,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3.0,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3.0,5.0,1.7,Iris-versicolor
6.0,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1.0,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1.0,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6.0,2.7,5.1,1.6,Iris-versicolor
5.4,3.0,4.5,1.5,Iris-versicolor
6.0,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3.0,4.1,1.3,Iris-versicolor
5.5,2.5,4.0,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3.0,4.6,1.4,Iris-versicolor
5.8,2.6,4.0,1.2,Iris-versicolor
5.0,2.3,3.3,1.0,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3.0,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3.0,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3.0,5.8,2.2,Iris-virginica
7.6,3.0,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2.0,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3.0,5.5,2.1,Iris-virginica
5.7,2.5,5.0,2.0,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3.0,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6.0,2.2,5.0,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2.0,Iris-virginica
7.7,2.8,6.7,2.0,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6.0,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3.0,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3.0,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2.0,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3.0,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6.0,3.0,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3.0,5.2,2.3,Iris-virginica
6.3,2.5,5.0,1.9,Iris-virginica
6.5,3.0,5.2,2.0,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica