数据分析可视化pandas

Series

import pandas as pd
obj=pd.Series([1,2,-3,-4])
print(obj)

0 1
1 2
2 -3
3 -4
dtype: int64

i=["a","c","d","a"]
v=[2,4,5,7]
t=pd.Series(data=v,index=i,name="col")
print(t)

a 2
c 4
d 5
a 7
Name: col, dtype: int64

val = [2, 4, 5, 6]
idx1 = range(10, 14)
idx2 = "hello the cruel world".split()
s0 = pd.Series(val)
s1 = pd.Series(val, index = idx1)
t = pd.Series(val, index = idx2)
print(s0)

0 2
1 4
2 5
3 6
dtype: int64

print(s1)

10 2
11 4
12 5
13 6
dtype: int64

print(t)

hello 2
the 4
cruel 5
world 6
dtype: int64

print(s0.index)

RangeIndex(start=0, stop=4, step=1)

print(s1.index)

RangeIndex(start=10, stop=14, step=1)

print(t.index)

Index([‘hello’, ‘the’, ‘cruel’, ‘world’], dtype=‘object’)

print(s0[0])

2

print(s1[10])

2

print('default:',t[0],'label:' ,t["hello"])

default: 2 label: 2

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
print(obj3)

Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64

通过字典创建

sdata = {"a" : 100, "b" : 200, "e" : 300}
letter = ["a","b","c","e" ]
obj =  pd.Series(sdata, index = letter)
print(obj)

a 100.0
b 200.0
c NaN
e 300.0
dtype: float64

键值和指定的索引不匹配
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj1 = pd.Series(sdata)
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj2 = pd.Series(sdata, index = states)
print('obj1:\n',obj1)
print('obj2:\n',obj2)

obj1:
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
obj2:
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
dtype: float64

不同索引数据的自动对齐
print(obj1+obj2)

California NaN
Ohio 70000.0
Oregon 32000.0
Texas 142000.0
Utah NaN
dtype: float64

Series 索引的修改
obj = pd.Series([4,7,-3,2])
print("修改前:\n",obj)
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
print("修改后:\n",obj)

修改前:
0 4
1 7
2 -3
3 2
dtype: int64
修改后:
Bob 4
Steve 7
Jeff -3
Ryan 2
dtype: int64

dataFrame

dataFrame 的创建
data = {
    'name':['张三', '李四', '王五', '小明'],
    'sex':['female', 'female', 'male', 'male'],
    'year':[2001, 2001, 2003, 2002],
    'city':['北京', '上海', '广州', '北京']
}
df=pd.DataFrame(data)
print(df)

name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京

索引
df1=pd.DataFrame(data,columns=['year','name','sex','city'])
print(df1)

.
. year name sex city
0 2001 张三 female 北京
1 2001 李四 female 上海
2 2003 王五 male 广州
3 2002 小明 male 北京

缺失值
df2=pd.DataFrame(data,columns=['year','name','sex','city','address'])
print(df2)

.
. year name sex city address
0 2001 张三 female 北京 NaN
1 2001 李四 female 上海 NaN
2 2003 王五 male 广州 NaN
3 2002 小明 male 北京 NaN

指定列名
df3=pd.DataFrame(data,columns=['year','name','sex','city'],index=['a','b','c','d'])
print(df3)

.
. year name sex city
a 2001 张三 female 北京
b 2001 李四 female 上海
c 2003 王五 male 广州
d 2002 小明 male 北京

索引对象 属性

print(df3)
print(df3.index)
print(df3.columns)

.
. year name sex city
a 2001 张三 female 北京
b 2001 李四 female 上海
c 2003 王五 male 广州
d 2002 小明 male 北京
Index([‘a’, ‘b’, ‘c’, ‘d’], dtype=‘object’)
Index([‘year’, ‘name’, ‘sex’, ‘city’], dtype=‘object’)

print('name' in df3.columns)
print('a' in df3.index)

True
True

print(df3.shape)

(4, 4)

print(df3.ndim)

2

print(df3.size)

16

print(df3.values)

[[2001 ‘张三’ ‘female’ ‘北京’]
[2001 ‘李四’ ‘female’ ‘上海’]
[2003 ‘王五’ ‘male’ ‘广州’]
[2002 ‘小明’ ‘male’ ‘北京’]]

df
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
插入索引值
df.index

RangeIndex(start=0, stop=4, step=1)

df.index.insert(1,'w')

Index([0, ‘w’, 1, 2, 3], dtype=‘object’)

索引操作

重建索引

obj = pd.Series([7.2,-4.3,4.5,3.6],index = ['b', 'a', 'd', 'c'])
print(obj)

b 7.2
a -4.3
d 4.5
c 3.6
dtype: float64

# 重建索引
obj.reindex(['a','b','c','d','e'])

a -4.3
b 7.2
c 3.6
d 4.5
e NaN
dtype: float64

# 重建索引时填充缺失值
obj.reindex(['a','b','c','d','e'],fill_value=4)

a -4.3
b 7.2
c 3.6
d 4.5
e 4.0
dtype: float64

import numpy as np
obj1=pd.Series(['blue','red','black'],index=[0,2,4])
obj1

0 blue
2 red
4 black
dtype: object

obj1.reindex(np.arange(6))

0 blue
1 NaN
2 red
3 NaN
4 black
5 NaN
dtype: object

obj1.reindex(np.arange(6),method='ffill')

0 blue
1 blue
2 red
3 red
4 black
5 black
dtype: object

obj1.reindex(np.arange(6),method='bfill')

0 blue
1 red
2 red
3 black
4 black
5 NaN
dtype: object

df4=pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['one','two','four'])
df4
one two four
a 0 1 2
c 3 4 5
d 6 7 8
print(df4)

.one two four
a 0 1 2
c 3 4 5
d 6 7 8

df4.reindex(index=['a','b','c','d'],columns=['one','two','three','four'])
one two three four
a 0.0 1.0 NaN 2.0
b NaN NaN NaN NaN
c 3.0 4.0 NaN 5.0
d 6.0 7.0 NaN 8.0
df4.reindex(index=['a','b','c','d'],columns=['one','two','three','four'],fill_value=3)
one two three four
a 0 1 3 2
b 3 3 3 3
c 3 4 3 5
d 6 7 3 8
df4
one two four
a 0 1 2
c 3 4 5
d 6 7 8
df4.reindex(index=['a','b','c','d'],method='ffill')
one two four
a 0 1 2
b 0 1 2
c 3 4 5
d 6 7 8
df4.reindex(index=['a','b','c','d'],method='bfill')
one two four
a 0 1 2
b 3 4 5
c 3 4 5
d 6 7 8
df1
year name sex city
0 2001 张三 female 北京
1 2001 李四 female 上海
2 2003 王五 male 广州
3 2002 小明 male 北京
df5=df1.set_index('city')# 索引为city
df5
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
df5.reset_index()
city year name sex
0 北京 2001 张三 female
1 上海 2001 李四 female
2 广州 2003 王五 male
3 北京 2002 小明 male
df1
year name sex city
0 2001 张三 female 北京
1 2001 李四 female 上海
2 2003 王五 male 广州
3 2002 小明 male 北京
df5
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
df5[['name','year']]
name year
city
北京 张三 2001
上海 李四 2001
广州 王五 2003
北京 小明 2002
# 选择非‘int64’类型的列显示
display(df5.select_dtypes(exclude='int64').head())

name sex
city
北京 张三 female
上海 李四 female
广州 王五 male
北京 小明 male
# 选择‘int64’类型的列显示
df5.select_dtypes(include=['int64']).head()
year
city
北京 2001
上海 2001
广州 2003
北京 2002
# 选择‘int64’类型的列显示
df5.select_dtypes(include=['int64']).head(3)
year
city
北京 2001
上海 2001
广州 2003
df
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
df[:2]
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
df[1:3]
name sex year city
1 李四 female 2001 上海
2 王五 male 2003 广州
df[1:]
name sex year city
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
df.head(3) # head(3)前3行
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
df.head()  # head() 前5行
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
df.tail(3)
name sex year city
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
df.sample(3)
name sex year city
2 王五 male 2003 广州
1 李四 female 2001 上海
3 小明 male 2002 北京
df.sample(frac=0.8) # 前80%行
name sex year city
0 张三 female 2001 北京
3 小明 male 2002 北京
1 李四 female 2001 上海
df5
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
# .loc根据行和列筛选
df5.loc[:,['name','year']]  
name year
city
北京 张三 2001
上海 李四 2001
广州 王五 2003
北京 小明 2002
df5.loc[['北京','上海'],['name','year']]
name year
city
北京 张三 2001
北京 小明 2002
上海 李四 2001
df5.loc[df5['year']<=2002,['name','year']]
name year
city
北京 张三 2001
上海 李四 2001
北京 小明 2002
df5
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
df5.iloc[:,2]

city
北京 female
上海 female
广州 male
北京 male
Name: sex, dtype: object

df5.iloc[[1,3]]
year name sex
city
上海 2001 李四 female
北京 2002 小明 male
df5.iloc[[1,3],:2]
year name
city
上海 2001 李四
北京 2002 小明
df5.iloc[[1,3],[0,2]]
year sex
city
上海 2001 female
北京 2002 male
df5
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
df5.query('year>2001')
year name sex
city
广州 2003 王五 male
北京 2002 小明 male
df5.query('year>2001 & year<2003')
year name sex
city
北京 2002 小明 male
df5[df5['year']==2001]
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
df5.query('year==2001')
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
df
data1 = {'city':'兰州','name':'李红','year':2005,'sex':'female'}
# df.append(datal,ignore_index=True)
df
name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
# 增加列
df['score']=[56,85,98,78]
df
name sex year city score
0 张三 female 2001 北京 56
1 李四 female 2001 上海 85
2 王五 male 2003 广州 98
3 小明 male 2002 北京 78
# 指定索引位置的后面插入列
df.insert(1,'No',['001','002','003','004'])
df
name No sex year city score
0 张三 001 female 2001 北京 56
1 李四 002 female 2001 上海 85
2 王五 003 male 2003 广州 98
3 小明 004 male 2002 北京 78
# 删除数据
print(df5)
print(df5.drop('广州'))
print(df5)  # 并没有在原数据修改

.
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
北京 2002 小明 male
year name sex
city
北京 2001 张三 female
上海 2001 李四 female
广州 2003 王五 male
北京 2002 小明 male


# 删除列
# df.drop('score',axis=1,inplace=True)
# df
# 修改列(直接修改原数据)
df['year']=2001
df
name No sex year city score
0 张三 001 female 2001 北京 56
1 李四 002 female 2001 上海 85
2 王五 003 male 2001 广州 98
3 小明 004 male 2001 北京 78
# 替换值
df.replace('张三','李明',inplace=True)
df
name No sex year city score
0 李明 001 female 2001 北京 56
1 李四 002 female 2001 上海 85
2 王五 003 male 2001 广州 98
3 小明 004 male 2001 北京 78
# 替换多个值
df.replace({'李明':'张山山','王五':'小五'},inplace=True)
df
name No sex year city score
0 张山山 001 female 2001 北京 56
1 李四 002 female 2001 上海 85
2 小五 003 male 2001 广州 98
3 小明 004 male 2001 北京 78
# 修改列名,要指定
df.rename(columns={'No':'number'},inplace=True)
df
name number sex year city score
0 张山山 001 female 2001 北京 56
1 李四 002 female 2001 上海 85
2 小五 003 male 2001 广州 98
3 小明 004 male 2001 北京 78

你可能感兴趣的:(数据分析与可视化,数据分析,pandas,python)