1. Dataframe基本概念
1)Dataframe(“带有标签的二维数组”):是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。
2)Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。Dataframe带有index(行标签)和columns(列标签)
import pandas as pd
import numpy as np
data = {'name':['Jack','Tom','Mary'],
'age':[18,19,20],
'gender':['m','m','w']}
frame = pd.DataFrame(data)
print(frame)
print(type(frame))
–> 输出的结果为:
name age gender
0 Jack 18 m
1 Tom 19 m
2 Mary 20 w
<class 'pandas.core.frame.DataFrame'>
3) Dataframe中的数据类型
.index
查看行标签
.columns
查看列标签
.values
查看值,数据类型为ndarray
print(frame.index,'\n该数据类型为:',type(frame.index))
print(frame.columns,'\n该数据类型为:',type(frame.columns))
print(frame.values,'\n该数据类型为:',type(frame.values))
–> 输出的结果为:
angeIndex(start=0, stop=3, step=1)
该数据类型为: <class 'pandas.core.indexes.range.RangeIndex'>
Index(['name', 'age', 'gender'], dtype='object')
该数据类型为: <class 'pandas.core.indexes.base.Index'>
[['Jack' 18 'm']
['Tom' 19 'm']
['Mary' 20 'w']]
该数据类型为: <class 'numpy.ndarray'>
2. Dataframe创建
2.1 创建方法一:由数组/list组成的字典
1)创建方法:pandas.Dataframe()
2)由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签
3)注意: 字典的值的长度必须保持一致!
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)
–> 输出的结果为:
{'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [5, 6, 7]}
{'one': array([0.55231278, 0.11346486, 0.04460787]), 'two': array([0.96373403, 0.88178355, 0.80008568])}
将数据转化为Dataframe
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
–> 输出的结果为:
a b c
0 1 3 5
1 2 4 6
2 3 5 7
one two
0 0.004175 0.804657
1 0.998857 0.714633
2 0.775254 0.070222
4) columns
参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如’d’),则产生NaN值
5) 如果columns
重新指定时候,列的数量可以少于原数据
df1 = pd.DataFrame(data1, columns = ['b','c','a','d'])
print(df1)
df1 = pd.DataFrame(data1, columns = ['b','c'])
print(df1)
–> 输出的结果为:
b c a d
0 3 5 1 NaN
1 4 6 2 NaN
2 5 7 3 NaN
b c
0 3 5
1 4 6
2 5 7
6) index
参数:重新定义index,格式为list,长度必须保持一致
df2 = pd.DataFrame(data2, index = ['f1','f2','f3'])
print(df2)
–> 输出的结果为:
one two
f1 0.492391 0.388535
f2 0.892257 0.774170
f3 0.286267 0.063995
2.2 创建方法二:由Series组成的字典
1)由Series组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)
2)Series可以长度不一样,生成的Dataframe会出现NaN值
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)
–> 输出的结果为:
{'one': 0 0.938612
1 0.065137
dtype: float64, 'two': 0 0.700473
1 0.515553
2 0.205660
dtype: float64}
{'one': a 0.639449
b 0.735204
dtype: float64, 'two': a 0.319101
b 0.910293
c 0.836814
dtype: float64}
将数据转化为Dataframe
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
–> 输出的结果为:
one two
0 0.653868 0.059260
1 0.913769 0.245643
2 NaN 0.408164
one two
a 0.629215 0.608634
b 0.946682 0.220755
c NaN 0.763010
2.3 创建方法三:通过二维数组直接创建
1) 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
2) index和colunms指定长度与原数组保持一致
ar = np.random.rand(9).reshape(3,3)
print(ar)
df1 = pd.DataFrame(ar)
print(df1)
–> 输出的结果为:(不指定index和columns)
[[0.65868808 0.33375653 0.39760116]
[0.6693393 0.84839768 0.35256847]
[0.8817482 0.26198774 0.80020949]]
0 1 2
0 0.658688 0.333757 0.397601
1 0.669339 0.848398 0.352568
2 0.881748 0.261988 0.800209
指定index和columns下创建数据
df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])
print(df2)
–> 输出的结果为:
one two three
a 0.658688 0.333757 0.397601
b 0.669339 0.848398 0.352568
c 0.881748 0.261988 0.800209
★★★★★2.4 创建方法四:由字典组成的列表
1) 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签
2) colunms和index参数分别重新指定相应列及行标签
data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
print(data)
df1 = pd.DataFrame(data)
–> 输出的结果为:(默认情况下)
[{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
one two three
0 1 2 NaN
1 5 10 20.0
修改index和columns
df2 = pd.DataFrame(data, index = ['a','b'])
df3 = pd.DataFrame(data, columns = ['one','two'])
print(df2)
print(df3)
–> 输出的结果为:
one two three
a 1 2 NaN
b 5 10 20.0
one two
0 1 2
1 5 10
2.5 创建方法五:由字典组成的字典
1)columns参数可以增加和减少现有列,如出现新的列,值为NaN
2)index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
3)由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key
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)
–> 输出的结果为:(正常情况下的输出)
Jack Marry Tom
math 90 82 78.0
english 89 95 67.0
art 78 92 NaN
修改index和columns参数后
df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
df3 = pd.DataFrame(data, index = ['a','b','c'])
print(df2)
print(df3)
–> 输出的结果为:
Jack Tom Bob
math 90 78.0 NaN
english 89 67.0 NaN
art 78 NaN NaN
Jack Marry Tom
a NaN NaN NaN
b NaN NaN NaN
c NaN NaN NaN