数据分析可视化pandas

本文详细介绍了Pandas库中Series和DataFrame的基本操作,包括数据创建、索引管理(如修改、插入和重建)、列名处理、数据对齐、缺失值处理以及替换值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
namesexyearcity
0张三female2001北京
1李四female2001上海
2王五male2003广州
3小明male2002北京
插入索引值
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
onetwofour
a012
c345
d678
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'])
onetwothreefour
a0.01.0NaN2.0
bNaNNaNNaNNaN
c3.04.0NaN5.0
d6.07.0NaN8.0
df4.reindex(index=['a','b','c','d'],columns=['one','two','three','four'],fill_value=3)
onetwothreefour
a0132
b3333
c3435
d6738
df4
onetwofour
a012
c345
d678
df4.reindex(index=['a','b','c','d'],method='ffill')
onetwofour
a012
b012
c345
d678
df4.reindex(index=['a','b','c','d'],method='bfill')
onetwofour
a012
b345
c345
d678
df1
yearnamesexcity
02001张三female北京
12001李四female上海
22003王五male广州
32002小明male北京
df5=df1.set_index('city')# 索引为city
df5
yearnamesex
city
北京2001张三female
上海2001李四female
广州2003王五male
北京2002小明male
df5.reset_index()
cityyearnamesex
0北京2001张三female
1上海2001李四female
2广州2003王五male
3北京2002小明male
df1
yearnamesexcity
02001张三female北京
12001李四female上海
22003王五male广州
32002小明male北京
df5
yearnamesex
city
北京2001张三female
上海2001李四female
广州2003王五male
北京2002小明male
df5[['name','year']]
nameyear
city
北京张三2001
上海李四2001
广州王五2003
北京小明2002
# 选择非‘int64’类型的列显示
display(df5.select_dtypes(exclude='int64').head())

namesex
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
namesexyearcity
0张三female2001北京
1李四female2001上海
2王五male2003广州
3小明male2002北京
df[:2]
namesexyearcity
0张三female2001北京
1李四female2001上海
df[1:3]
namesexyearcity
1李四female2001上海
2王五male2003广州
df[1:]
namesexyearcity
1李四female2001上海
2王五male2003广州
3小明male2002北京
df.head(3) # head(3)前3行
namesexyearcity
0张三female2001北京
1李四female2001上海
2王五male2003广州
df.head()  # head() 前5行
namesexyearcity
0张三female2001北京
1李四female2001上海
2王五male2003广州
3小明male2002北京
df.tail(3)
namesexyearcity
1李四female2001上海
2王五male2003广州
3小明male2002北京
df.sample(3)
namesexyearcity
2王五male2003广州
1李四female2001上海
3小明male2002北京
df.sample(frac=0.8) # 前80%行
namesexyearcity
0张三female2001北京
3小明male2002北京
1李四female2001上海
df5
yearnamesex
city
北京2001张三female
上海2001李四female
广州2003王五male
北京2002小明male
# .loc根据行和列筛选
df5.loc[:,['name','year']]  
nameyear
city
北京张三2001
上海李四2001
广州王五2003
北京小明2002
df5.loc[['北京','上海'],['name','year']]
nameyear
city
北京张三2001
北京小明2002
上海李四2001
df5.loc[df5['year']<=2002,['name','year']]
nameyear
city
北京张三2001
上海李四2001
北京小明2002
df5
yearnamesex
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]]
yearnamesex
city
上海2001李四female
北京2002小明male
df5.iloc[[1,3],:2]
yearname
city
上海2001李四
北京2002小明
df5.iloc[[1,3],[0,2]]
yearsex
city
上海2001female
北京2002male
df5
yearnamesex
city
北京2001张三female
上海2001李四female
广州2003王五male
北京2002小明male
df5.query('year>2001')
yearnamesex
city
广州2003王五male
北京2002小明male
df5.query('year>2001 & year<2003')
yearnamesex
city
北京2002小明male
df5[df5['year']==2001]
yearnamesex
city
北京2001张三female
上海2001李四female
df5.query('year==2001')
yearnamesex
city
北京2001张三female
上海2001李四female
df
data1 = {'city':'兰州','name':'李红','year':2005,'sex':'female'}
# df.append(datal,ignore_index=True)
df
namesexyearcity
0张三female2001北京
1李四female2001上海
2王五male2003广州
3小明male2002北京
# 增加列
df['score']=[56,85,98,78]
df
namesexyearcityscore
0张三female2001北京56
1李四female2001上海85
2王五male2003广州98
3小明male2002北京78
# 指定索引位置的后面插入列
df.insert(1,'No',['001','002','003','004'])
df
nameNosexyearcityscore
0张三001female2001北京56
1李四002female2001上海85
2王五003male2003广州98
3小明004male2002北京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
nameNosexyearcityscore
0张三001female2001北京56
1李四002female2001上海85
2王五003male2001广州98
3小明004male2001北京78
# 替换值
df.replace('张三','李明',inplace=True)
df
nameNosexyearcityscore
0李明001female2001北京56
1李四002female2001上海85
2王五003male2001广州98
3小明004male2001北京78
# 替换多个值
df.replace({'李明':'张山山','王五':'小五'},inplace=True)
df
nameNosexyearcityscore
0张山山001female2001北京56
1李四002female2001上海85
2小五003male2001广州98
3小明004male2001北京78
# 修改列名,要指定
df.rename(columns={'No':'number'},inplace=True)
df
namenumbersexyearcityscore
0张山山001female2001北京56
1李四002female2001上海85
2小五003male2001广州98
3小明004male2001北京78
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值