DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
DataFrame构造方法:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
#!/usr/bin/python
import pandas as pd
data = [['zhangsan','18'],['lisi','20'],['wangwu','22']]
#构造dataframe结构,index行索引,columns列索引
df = pd.DataFrame(data, index=['a','b','c'], columns=['name','age'])
print(df)
print(type(df))
out:
name age
a zhangsan 18
b lisi 20
c wangwu 22
#!/usr/bin/python
import pandas as pd
data = {'name':['zs','ls','ww'],'age':[18,20,22]}
df = pd.DataFrame(data, index=['a','b','c'])
print(df)
out:
name age
a zs 18
b ls 20
c ww 22
DataFrame类似于一个表格,包括rows(行)和columns(列)。
Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
#!/usr/bin/python
import pandas as pd
data = {'name':['zs','ls','ww'],'age':[18,20,22]}
df = pd.DataFrame(data)
print(df)
print(df.loc[0])
out:
name age
0 zs 18
1 ls 20
2 ww 22
name zs
age 18
Name: 0, dtype: object
#返回的其实就是一个pandas Series数据
#也可以返回多行
print(df.loc[[0,1]])
out:
name age
0 zs 18
1 ls 20
#其实返回的也是一个pandas DataFrame数据
#通过head获取前两行数据
print(df.head(2))
out:
name age
0 zs 18
1 ls 20
#同理,通过tail获取后两行数据
print(df.tail(2))
out:
name age
1 ls 20
2 ww 22
shape:返回行数、列数
print(df.shape)
out:
(3, 2)
#分别获取行数、列数
print(df.shape[0], df.shape[1])
out:
3 2
切片:
#!/usr/bin/python
import pandas as pd
data = {'name':['zs','ls','ww'],'age':[18,20,22], 'height':[170,172,175]}
df = pd.DataFrame(data)
#df[:2] 取第0行、第一行的数据
print(df[:2])
out:
name age height
0 zs 18 170
1 ls 20 172
#同时,获取行的同时可以指定列
print(df[:2][['name','age']])
out:
name age
0 zs 18
1 ls 20
DataFrame使用groupby进行分组:
#!/usr/bin/python
import pandas as pd
data = {'name':['zs','ls','ww'],'age':[18,20,22],'sex':['boy','girl','boy']}
df = pd.DataFrame(data)
print(df)
#按性别进行分组
print(df.groupby(['sex']).size())
out:
name age sex
0 zs 18 boy
1 ls 20 girl
2 ww 22 boy
sex
boy 2
girl 1
dtype: int64
set_index()与reset_index():
#!/usr/bin/python
import pandas as pd
data = {'name':['zs','ls','ww'],'age':[18,20,22],'sex':['boy','girl','boy']}
df = pd.DataFrame(data)
print(df)
aaa = df.groupby(['sex']).size()
bbb = aaa.reset_index(name='小计')
ccc = bbb.set_index(pd.Series(['a','b']))
print(aaa)
print(bbb)
print(ccc)
out:
name age sex
0 zs 18 boy
1 ls 20 girl
2 ww 22 boy
sex
boy 2
girl 1
dtype: int64
#reset_index
sex 小计
0 boy 2
1 girl 1
#set_index设置索引
sex 小计
a boy 2
b girl 1
参考:Pandas 数据结构 – DataFrame | 菜鸟教程
第004篇:DataFrame - 简介 - 知乎