前面两篇博客写了一维数组Series,接下来再来写写二维数组DataFrame,DataFrame是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等,它的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。
(1)Dataframe数据结构
Dataframe数据结构是一个表格型的数据结构,是带有标签的二维数组,带有行标签(index)和列标签(columns),通过.index查看行标签,.columns查看列标签,.values 查看值,数据类型为ndarrary
data = {'name':['Jack','Tom','Mary'],
'age':[18,19,20],
'gender':['m','m','w']}
frame = pd.DataFrame(data)
print(frame)
print(type(frame))
print(frame.index,'\n该数据类型为:',type(frame.index))
print(frame.columns,'\n该数据类型为:',type(frame.columns))
print(frame.values,'\n该数据类型为:',type(frame.values))
输出结果:
在后面做数据分析的时候我们大部分用的是DataFrame,它和excel表格数据是很相像的
(2)创建方法
Dataframe 的创建方法非常多,首先来看由数组/list组成的字典创建
data1 = {'a':[1,2,3],
'b':[3,4,5],
'c':[5,6,7]}#生成字典
data2 = {'one':np.random.rand(3),
'two':np.random.rand(3)}
print(data1)
print(data2)
df1 = pd.DataFrame(data1)#创建为Dataframe数据
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
输出结果:
这里我们需要注意,由数组/list组成的字典创建Dataframe,column是为字典key,index为默认数字标签,字典的值的长度一定要保持一致!
我们当然可以改变列标签columns的值
df1 = pd.DataFrame(data1, columns = ['b','c','a','d'])
print(df1)
df1 = pd.DataFrame(data1, columns = ['b','c'])
print(df1)
输出结果:
重新指定columns的时候,可以指定列的顺序,列的数量可以多于或少于原数据,多的时候体现为空值NaN
当然了我们也可以更改行标签index
df2 = pd.DataFrame(data2, index = ['f1','f2','f3']) # 这里如果尝试 index = ['f1','f2','f3','f4'] 会怎么样?
print(df2)
输出结果:
更改行标签index 的时候需要注意新定义的index数量必须和原index数量保持一致
第二种方法是由Series组成的字典创建,创建方法其实大同小异啦
data1 = {'one':pd.Series(np.random.rand(2)),
'two':pd.Series(np.random.rand(3))} # 没有设置index的Series
data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
'two':pd.Series(np.random.rand(3),index = ['a','b','c'])} # 设置了index的Series
print(data1)
print(data2)
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
输出结果:
由Series组成字典,创建Dataframe,columns为字典key,index为Series的标签,Series的长度可以不一样,生成的DataFrame会出现NaN
第三种创建方法是由二维数组直接创建,这种方法我们比较常用,因为我们读取的excel数据就是二维数组的形式
ar = np.random.rand(9).reshape(3,3)
print(ar)
df1 = pd.DataFrame(ar)
df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three']) # 可以尝试一下index或columns长度不等于已有数组的情况
print(df1)
print(df2)
输出结果:
通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者则均返回默认的数字形式,要注意index和columns的指定长度需要和原来数组保持一致
第四种创建方法呢是由字典组成的列表来创建
data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
print(data)
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index = ['a','b'])
df3 = pd.DataFrame(data, columns = ['one','two'])
print(df1)
print(df2)
print(df3)
输出结果:
最后一种创建方法就稍微有一丢丢复杂,由字典组成的字典创建
data = {'Jack':{'math':90,'english':89,'art':78},
'Marry':{'math':82,'english':95,'art':92},
'Tom':{'math':78,'english':67}}
df1 = pd.DataFrame(data)
print(df1)
今天就到这里吧,不想继续写了
我是一位211高校在读的本科生,是个耿直GIRL,对数据分析比较感兴趣,去年拿到了数学建模国家一等奖,今年参加了美赛还没结果,参加比赛选的题型都是大数据型,用过Excel,Spss,Lingo,MATLAB做数据分析,现在觉得Python比较高效,做数据可视化也非常方便,每天都在坚持学习,对Python数据分析和数据可视化有兴趣的可以关注我哦,每天都会更新的,跟我一起进步呀