Pandas 一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)。
pd.Series(data,index,dtype,name,copy)
Series 是一种类似于一维数组的对象,相当于表格中的一列,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
结果全部输出
import pandas as pd
a = [1,2,3]
a = pd.Series(a)
print(a)
# 输出结果:
0 1
1 2
2 3
dtype: int64
索引结果输出index部分
import pandas as pd
a = ["a","b","c"]
b= pd.Series(a,index=["x","y","z"])
print(b)
# 输出结果:
x a
y b
z c
dtype: object
结果是key+value,有index时只输出一部分
import pandas as pd
dict1 = {
1:"Google", 2:"baidu", 3:"360"
}
c = pd.Series(dict1,name='SSS')#设置名称参数
print(c)
# 字典的 key变成了索引值
# 可以指定需要数据的索引输出
d = pd.Series(dict1,index=[1,2],name='AAA')
print(d)
输出结果:
1 Google
2 baidu
3 360
Name: SSS, dtype: object
1 Google
2 baidu
Name: AAA, dtype: object
pd.DataFrame( data, index, columns, dtype, copy)
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
import pandas as pd
data1 = {
'sites': ['Google','Runoob','Wiki'],
'number' : [1,2,3]
}
a = pd.DataFrame(data1)
print(a)
# 输出结果:
sites number
0 Google 1
1 Runoob 2
2 Wiki 3
data2 = [
['Google',10],
['Baidu',20],
['360',30]
]
b = pd.DataFrame(data2,columns=['Site','Age'],dtype=float)
print(b)
# 输出结果:
Site Age
0 Google 10.0
1 Baidu 20.0
2 360 30.0
data3 = [
{
'a':1,
'b':2
},
{
'a':3,
'b':4,
'c':5
}
]
c = pd.DataFrame(data3)
print(c)
# 输出结果(没有对应的部分数据为 NaN):
a b c
0 1 2 NaN
1 3 4 5.0
data4 = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
d = pd.DataFrame(data4, index = ["day1", "day2", "day3"])
print(d)
# 输出结果:
calories duration
day1 420 50
day2 380 40
day3 390 45
即增加列或改变列的数据
import pandas as pd
e = pd.DataFrame(
data = [
[60, 78, 92, 85],
[70, 68, 95, 76],
[88, 98, 83, 87]
],
index = ['小明', '小红', '小强', ],
columns = ['语文', '数学', '英语', '化学'],
dtype = float,
copy = False
)
f = pd.DataFrame(e, copy = False)#浅拷贝
print(f)
f['语文'] = [0, 0, 0]
print(f)
#输出结果:
语文 数学 英语 化学
小明 60.0 78.0 92.0 85.0
小红 70.0 68.0 95.0 76.0
小强 88.0 98.0 83.0 87.0
语文 数学 英语 化学
小明 0 78.0 92.0 85.0
小红 0 68.0 95.0 76.0
小强 0 98.0 83.0 87.0
使用, axis = 0表示对行操作, axis = 1表示针对列的操作, inplace为True, 则直接在源数据上进行修改, 否则源数据会保持原样
dataFrame.drop('化学', axis = 1, inplace = True)
data1.loc[index]
返回第一行:
print(data1.loc[0])
返回多行:
print(data1.loc[[0,2]])#第一和第三行
指定indx:
data1 = pd.DataFrame(data, index = ["day1", "day2", "day3"])
print(df.loc["day2"])#即返回day2对应的行
一维数据:
sites = {
1:"Google", 2:"baidu", 3:"360"
}
a = pd.Series(sites)
print(a)
print(a.loc[2])#返回baidu
.to_csv(路径):保存为.csv文件
.to_excel(路径):保存为.xlsx文件
import pandas as pd
dataFrame = pd.read_csv('../数据/test.csv')
print(dataFrame)
import pandas as pd
dataFrame = pd.read_excel(
'../数据/test.XLSX',
header = None
)
print(dataFrame)
concat(dataFrame列表):将这些dataFrame的数据纵向叠加
import pandas as pd
dataFrame1 = pd.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 22, 178],
['三级', '游泳', 21, 185],
['二级', '游泳', 19, 182],
],
columns=['等级', '爱好', '年龄', '身高'],
index = ['小明', '小红', '小强', '小于']
)
r = pd.concat([dataFrame1, dataFrame1])
print(r)
#输出结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
import pandas as pd
dataFrame1 = pd.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 22, 178],
['三级', '游泳', 21, 185],
['二级', '游泳', 19, 182],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame1)
dataFrame2 = pd.DataFrame(
data=[
['学士', 'O'],
['学士', 'A'],
['博士', 'A'],
['院士', 'B'],
],
columns=['学位', '血型'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame2)
r = pd.merge(
left=dataFrame1,
right=dataFrame2,
left_index=True,
right_index=True,
how='inner'
)
print(r)
#输出结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
学位 血型
小明 学士 O
小红 学士 A
小强 博士 A
小于 院士 B
等级 爱好 年龄 身高 学位 血型
小明 一级 读书 21 176 学士 O
小红 二级 游泳 22 178 学士 A
小强 三级 游泳 21 185 博士 A
小于 二级 游泳 19 182 院士 B
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.dropna())
#输出结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小强 三级 游泳 21.0 185.0
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull())
print(dataFrame['等级'].isnull())
#输出结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 False True False False
小红 False False True False
小强 False False False False
小于 True False False True
小明 False
小红 False
小强 False
小于 True
Name: 等级, dtype: bool
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull().sum())
#输出结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 1
爱好 1
年龄 1
身高 1
dtype: int64
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
dataFrame['年龄'] = dataFrame['年龄'].fillna(20)
print(dataFrame)
#输出结果:
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 20.0 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
.dropduplicates(subset = 列名列表, keep = ‘first’ 或 ‘last’):删除完全重复行, 可指定某字段重复时删除, 默认保留第一个, 后面重复的会删掉
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.drop_duplicates(subset = ['爱好'], keep = 'first'))
#输出结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
.sort_values(by = 列名, ascending = 是否升序):对某列排序
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
dataFrame = dataFrame.sort_values(by = '等级', ascending = True)
print(dataFrame)
#输出结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小强 三级 游泳 21.0 185.0
小红 二级 游泳 NaN 178.0
小于 None 游泳 19.0 NaN
分组就是把指定的一列的值相同的分为一组, 调用一些函数对这些指定列值相同数据进行操作
.groupby(‘列名’):对指定列分组, 就是把该列值一样的分成一组
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 20, 178],
['三级', '游泳', 21, 185],
['四级', '游泳', 19, 177],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
groupData = dataFrame.groupby('年龄')
cut(x = 切分数据, bins = 切分方式, right = 是否包含右区间, labels = 分割后每段的名字列表):对一个数组进行分段
import pandas as pd
dataFrame = pd.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 20, 178],
['三级', '游泳', 21, 185],
['四级', '游泳', 19, 177],
['四级', '读书', 19, 165],
['四级', '读书', 19, 190],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于', '小兰', '小智']
)
r = pd.cut(x = dataFrame['身高'], bins = [160, 170, 180, 190, 200], right = False, labels = ['中等身高', '身高较高', '身高很高', '身高太高'])
print(r, end = '\n')
r = pd.cut(x=dataFrame['身高'], bins = 4, right=False, labels=['中等身高', '身高较高', '身高很高', '身高太高'])
print(r)
#输出结果:
小明 身高较高
小红 身高较高
小强 身高很高
小于 身高较高
小兰 中等身高
小智 身高太高
Name: 身高, dtype: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']
小明 身高较高
小红 身高很高
小强 身高太高
小于 身高较高
小兰 中等身高
小智 身高太高
Name: 身高, dtype: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']