标签:nump 通过 情况 text unique head 排列 列表 方法
# 导入pandas与numpy
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
Series是一种类似与一维数组的对象,由下面两个部分组成:
两种创建方式:
# 使用列表创建Series
Series(data=[1, 2, 3])
0 1
1 2
2 3
dtype: int64
s = Series(data=[1,2,3],index=['a','b','c'])
print(s)
a 1
b 2
c 3
dtype: int64
s[0] # 1
s['a'] # 1
s.a # 1
1
练习:
使用多种方法创建以下Series,命名为s1:
语文 150
数学 150
英语 150
理综 300
s1 = Series(data=[150, 150, 150, 300], index=['语文', '数学', '英语', '理综'])
print(s1)
语文 150
数学 150
英语 150
理综 300
dtype: int64
arr = np.array([150, 150, 150, 300])
s1 = Series(data=arr, index=['语文', '数学', '英语', '理综'])
可以使用中括号取单个索引(此时返回的是元素类型) ,或者中括号里一个列表取多个索引(此时返回的是一个Series类型)。
显式索引:
注意,此时是闭区间
s1
语文 150
数学 150
英语 150
理综 300
dtype: int32
s1[3] # 300
s1[[1, 3]]
数学 150
理综 300
dtype: int32
s1[0:2]
语文 150
数学 150
dtype: int32
s1.iloc[0:2] # 行切片
语文 150
数学 150
dtype: int32
可以使用s.head(),tail()分别查看前n个和后n个值
s = Series(data=[1, 2, 2, 3, 3, 4, 5, 6, 6, 8])
s.head(2)
0 1
1 2
dtype: int64
s.tail(2)
8 6
9 8
dtype: int64
对Series元素进行去重
s.unique()
array([1, 2, 3, 4, 5, 6, 8], dtype=int64)
当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况
s1 = Series([1, 2, 3],index=['a', 'b', 'c'])
s2 = Series([1, 2, 3],index=['a', 'd', 'c'])
s = s1 + s2
s
a 2.0
b NaN
c 6.0
d NaN
dtype: float64
可以使用pd.isnull(),pd.notnull(),或s.isnull(),s.notnull()函数检测缺失数据
s[['a','b','c']]
s[[0,1,2]]
s[[True,False,True,False]] # 取出True所对应的行
a 2.0
c 6.0
dtype: float64
s.isnull() # 显示是否为null
a False
b True
c False
d True
dtype: bool
s.notnull() # 显示是否不为null
a True
b False
c True
d False
dtype: bool
# 将Series中的空值进行清洗
s[s.notnull()]
a 2.0
c 6.0
dtype: float64
Series之间的运算
s1 = Series([1, 2, 3],index=['a', 'b', 'c'])
s2 = Series([1, 2, 3],index=['a', 'd', 'c'])
s = s1 + s2
s
a 2.0
b NaN
c 6.0
d NaN
dtype: float64
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。
此外,DataFrame会自动加上每一行的索引。
使用字典创建的DataFrame后,则columns参数将不可被使用。
同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。
df = DataFrame(data=np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D'])
df
A | B | C | D | |
---|---|---|---|---|
a | 22 | 32 | 21 | 50 |
b | 33 | 36 | 17 | 10 |
c | 46 | 92 | 15 | 50 |
DataFrame属性:values、columns、index、shape
df.values # 所有的元素,数组
df.columns # 所有的列索引
df.index # 所有的行索引
df.shape # 形状
(3, 4)
dic = {
'张三': [99, 11],
'李四': [88, 12],
'王五': [10, 100]
}
df = DataFrame(data=dic, index=['语文', '数学'])
df
张三 | 李四 | 王五 | |
---|---|---|---|
语文 | 99 | 88 | 10 |
数学 | 11 | 12 | 100 |
练习:
根据以下考试成绩表,创建一个DataFrame,命名为df:
张三 李四
语文 150 0
数学 150 0
英语 150 0
理综 300 0
dic = {
'张三': [150, 150, 150, 300],
'李四': [0, 0, 0, 0]
}
df = DataFrame(data=dic, index=['语文', '数学', '英语', '理综'])
df
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 150 | 0 |
英语 | 150 | 0 |
理综 | 300 | 0 |
对列进行索引
- 通过类似字典的方式 df[‘q‘]
- 通过属性的方式 df.q
可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
df
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 150 | 0 |
英语 | 150 | 0 |
理综 | 300 | 0 |
df['张三'] # 列索引
语文 150
数学 150
英语 150
理综 300
Name: 张三, dtype: int64
对行进行索引
- 使用.loc[]加index来进行行索引(显式索引)
- 使用.iloc[]加整数来进行行索引(隐式索引)
同样返回一个Series,index为原来的columns。
df.loc['语文']
df.iloc[0]
df.iloc[[0, 1]]
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 150 | 0 |
对元素索引的方法
df.iloc[2,1] # 2行1列
df.loc['英语','张三'] # 英语行,张三列
df.iloc[[1,2],1] # 1,2行的1列
数学 0
英语 0
Name: 李四, dtype: int64
【注意】
直接用中括号时:
df[0:2] #行切片
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 150 | 0 |
在loc和iloc中使用切片(切列) : df.loc[‘B‘:‘C‘,‘丙‘:‘丁‘]
df.iloc[:, 0:1]
张三 | |
---|---|
语文 | 150 |
数学 | 150 |
英语 | 150 |
理综 | 300 |
DataFrame之间的运算
同Series一样:
dic = {
'张三': [150, 150, 150, 300],
'李四': [0, 0, 0, 0]
}
df1 = DataFrame(data=dic, index=['语文', '数学', '英语', '理综'])
df1
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 150 | 0 |
英语 | 150 | 0 |
理综 | 300 | 0 |
dic = {
'张三': [15, 15, 15, 30],
'李四': [60, 50, 40, 30]
}
df2 = DataFrame(data=dic, index=['语文', '数学', '英语', '理综'])
df2
张三 | 李四 | |
---|---|---|
语文 | 15 | 60 |
数学 | 15 | 50 |
英语 | 15 | 40 |
理综 | 30 | 30 |
假设df1是期中考试成绩,df2是期末考试成绩,求期中期末平均值。
假设张三期中考试数学被发现作弊,要记为0分,如何实现?
李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
mean_score = (df1 + df2)/2
mean_score
张三 | 李四 | |
---|---|---|
语文 | 82.5 | 30.0 |
数学 | 82.5 | 25.0 |
英语 | 82.5 | 20.0 |
理综 | 165.0 | 15.0 |
df1.loc['数学', '张三'] = 0
df1
张三 | 李四 | |
---|---|---|
语文 | 150 | 0 |
数学 | 0 | 0 |
英语 | 150 | 0 |
理综 | 300 | 0 |
df1.loc[:,'李四'] += 100
df1
张三 | 李四 | |
---|---|---|
语文 | 150 | 100 |
数学 | 0 | 100 |
英语 | 150 | 100 |
理综 | 300 | 100 |
# dif[:,:] += 10
df1 += 10
df1
张三 | 李四 | |
---|---|---|
语文 | 160 | 110 |
数学 | 10 | 110 |
英语 | 160 | 110 |
理综 | 310 | 110 |
标签:nump 通过 情况 text unique head 排列 列表 方法
原文地址:https://www.cnblogs.com/zyyhxbs/p/11693166.html