1. Python pandas用法
在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。 使用下面格式约定,引入pandas包:
pandas有两个主要数据结构:Series和DataFrame。
Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。
pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。
Series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字in操作、使用.get()方法。 Series和ndarray之间的主要区别在于Series之间的操作会根据索引自动对齐数据。
DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:
数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型index的常用方法:
重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。 df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量;copy 默认True,生成新的对象,False时,新旧相等不复制。
删除指定索引 :默认返回的是一个新对象。 .drop() :能够删除Series和DataFrame指定行或列索引。 删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。 如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。 增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。
在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结
适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。 .describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。 .sum() :计算各列数据的和 .count() :非NaN值的数量 .mean( )/.median() :计算数据的算术平均值、算术中位数 .var()/.std() :计算数据的方差、标准差 .corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。 .corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。 .min()/.max() :计算数据的最小值、最大值 .diff() :计算一阶差分,对时间序列很有效 .mode() :计算众数,返回频数最高的那(几)个 .mean() :计算均值 .quantile() :计算分位数(0到1) .isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集 适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。 .unique() :返回一个Series中的唯一值组成的数组。 .value_counts() :计算一个Series中各值出现的频率。 .argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引) .idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。
替换值 .replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head():查询数据的前五行 df.tail():查询数据的末尾5行 pandas.cut() pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。 pandas.date_range() 返回一个时间索引 df.apply() 沿相应轴应用函数 Series.value_counts() 返回不同数据的计数值 df.aggregate() df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用 numpy.zeros()
2. 怎么利用pandas做数据分析
Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作。
1. 基本使用:创建DataFrame. DataFrame是一张二维的表,大家可以把它想象成一张Excel表单或者Sql表。Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框“此文本包含多行文本,无法放置在一个工作表中”。Pandas处理上千万的数据是易如反掌的sh事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。
说了一大堆它的好处,要实际感触还得动手码代码。首要的任务就是创建一个DataFrame,它有几种创建方式:
(1)列表,序列(pandas.Series), numpy.ndarray的字典
二维numpy.ndarray
别的DataFrame
结构化的记录(structured arrays)
(2)其中,二维ndarray创建DataFrame,代码敲得最少:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4))
df
0 1 2 3
0 0.927474 0.127571 1.655908 0.570818
1 -0.425084 -0.382933 0.468073 -0.862898
2 -1.602712 -0.225793 -0.688641 1.167477
3 -1.771992 -0.692575 -0.693494 -1.063697
4 -0.456724 0.371165 1.883742 -0.344189
5 1.024734 0.647224 1.134449 0.266797
6 1.247507 0.114464 2.271932 -0.682767
7 -0.190627 -0.096997 -0.204778 -0.440155
8 -0.471289 -1.025644 -0.741181 -1.707240
9 -0.172242 0.702187 -1.138795 -0.112005
(3)通过describe方法,可以对df中的数据有个大概的了解:
df.describe()
0 1 2 3
count 10.000000 10.000000 10.000000 10.000000
mean -0.189096 -0.046133 0.394722 -0.320786
std 1.027134 0.557420 1.258019 0.837497
min -1.771992 -1.025644 -1.138795 -1.707240
25% -0.467648 -0.343648 -0.692281 -0.817865
50% -0.307856 0.008734 0.131648 -0.392172
75% 0.652545 0.310266 1.525543 0.172096
max 1.247507 0.702187 2.271932 1.167477
2. 改变cell。
3. group by。
4. 读写文件。
3. 怎么利用pandas做数据分析
Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作。
1. 基本使用:创建DataFrame. DataFrame是一张二维的表,大家可以把它想象成一张Excel表单或者Sql表。Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框“此文本包含多行文本,无法放置在一个工作表中”。Pandas处理上千万的数据是易如反掌的sh事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。
说了一大堆它的好处,要实际感触还得动手码代码。首要的任务就是创建一个DataFrame,它有几种创建方式:
(1)列表,序列(pandas.Series), numpy.ndarray的字典
二维numpy.ndarray
别的DataFrame
结构化的记录(structured arrays)
(2)其中,二维ndarray创建DataFrame,代码敲得最少:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4))
df
0 1 2 3
0 0.927474 0.127571 1.655908 0.570818
1 -0.425084 -0.382933 0.468073 -0.862898
2 -1.602712 -0.225793 -0.688641 1.167477
3 -1.771992 -0.692575 -0.693494 -1.063697
4 -0.456724 0.371165 1.883742 -0.344189
5 1.024734 0.647224 1.134449 0.266797
6 1.247507 0.114464 2.271932 -0.682767
7 -0.190627 -0.096997 -0.204778 -0.440155
8 -0.471289 -1.025644 -0.741181 -1.707240
9 -0.172242 0.702187 -1.138795 -0.112005
(3)通过describe方法,可以对df中的数据有个大概的了解:
df.describe()
0 1 2 3
count 10.000000 10.000000 10.000000 10.000000
mean -0.189096 -0.046133 0.394722 -0.320786
std 1.027134 0.557420 1.258019 0.837497
min -1.771992 -1.025644 -1.138795 -1.707240
25% -0.467648 -0.343648 -0.692281 -0.817865
50% -0.307856 0.008734 0.131648 -0.392172
75% 0.652545 0.310266 1.525543 0.172096
max 1.247507 0.702187 2.271932 1.167477
2. 改变cell。
3. group by。
4. 读写文件。
4. 怎么利用pandas做数据分析
Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作。
1. 基本使用:创建DataFrame. DataFrame是一张二维的表,大家可以把它想象成一张Excel表单或者Sql表。Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框“此文本包含多行文本,无法放置在一个工作表中”。Pandas处理上千万的数据是易如反掌的sh事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。
说了一大堆它的好处,要实际感触还得动手码代码。首要的任务就是创建一个DataFrame,它有几种创建方式:
(1)列表,序列(pandas.Series), numpy.ndarray的字典
二维numpy.ndarray
别的DataFrame
结构化的记录(structured arrays)
(2)其中,二维ndarray创建DataFrame,代码敲得最少:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4))
df
0 1 2 3
0 0.927474 0.127571 1.655908 0.570818
1 -0.425084 -0.382933 0.468073 -0.862898
2 -1.602712 -0.225793 -0.688641 1.167477
3 -1.771992 -0.692575 -0.693494 -1.063697
4 -0.456724 0.371165 1.883742 -0.344189
5 1.024734 0.647224 1.134449 0.266797
6 1.247507 0.114464 2.271932 -0.682767
7 -0.190627 -0.096997 -0.204778 -0.440155
8 -0.471289 -1.025644 -0.741181 -1.707240
9 -0.172242 0.702187 -1.138795 -0.112005
(3)通过describe方法,可以对df中的数据有个大概的了解:
df.describe()
0 1 2 3
count 10.000000 10.000000 10.000000 10.000000
mean -0.189096 -0.046133 0.394722 -0.320786
std 1.027134 0.557420 1.258019 0.837497
min -1.771992 -1.025644 -1.138795 -1.707240
25% -0.467648 -0.343648 -0.692281 -0.817865
50% -0.307856 0.008734 0.131648 -0.392172
75% 0.652545 0.310266 1.525543 0.172096
max 1.247507 0.702187 2.271932 1.167477
2. 改变cell。
3. group by。
4. 读写文件。
5. 深入浅出Pandas--Pandas的数据结构
Pandas提供Series和DataFrame作为数组数据的存储框架,数据进入这两种框架后,我们就可以利用它们提供的强大处理方法进行处理。
需要注意的是,Pandas之前支持的三维面板(Panel)结构现已不再支持,可以使用多层索引形式来实现。
Series(系列、数列、序列)是一个带有标签的一维数组,这一系列连续的数据代表了一定的业务意义。如以下各国2019年的GDP就是一个典型的Series。
其中,国家是标签(也称索引),不是具体的数据,它起到解释、定位数据的作用。如果没有标签,只有一个数字,是不具有业务意义的。Series是Pandas最基础的数据结构。
DataFrame意为数据框,它就像一个存放数据的架子,有多行多列,每个数据在一个格子里,每个格子有自己的编号。就像一个球场的座位(下图),我们在横向编成1排、2排、3排等,在纵向编成1号、2号、3号等,那么4排18号、6排1号等就是具体的位置,每个人落座后就像一个具体的数据。
DataFrame是Pandas定义的一个二维数据结构,其结构如下图
我们给上例国家GDP Series数据中增加一列“人口”,形成一个DataFrame
在后续的内容中,在不同场景下可能会对索引使用以下名称。
end~
6. Pandas入门数据分析01-什么是Pandas
7. Pandas基础
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。 Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。 Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。 Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。 Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。 Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。 Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
8. python自带及pandas、numpy数据结构(一)
1.python自带数据结构:序列(如list)、映射(如字典)、集合(set)。 以下只介绍序列中的list: 创建list: list1 = [] list1 = [1,2,3,4,5,6,7,8,9] #逗号隔开 list2 = [[1,2],[3,4],[5,6],[7,8]] #list2长度(len(list2))为2,list2[0] = [1,2] liststring = list(“thisisalist”) #只用于创建字符串列表 索引list: e = list1[0] #下标从零开始,用中括号 分片list: es = list1[0:3] es = list1[0:9:2] #步长在第二个冒号后 list拼接(list1.append(obj)、加运算及乘运算):
list长度:
list每个元素乘一个数值: list2 = numpy.dot(list2,2) list类似矩阵相乘(每个元素对应相乘取和): list3 = numpy.dot(list1,list1) #要求相乘的两个list长度相同 list3 = numpy.dot(list2,list22) #要求numpy.shape(list2)和numpy.shape(list22)满足“左行等于右列”的矩阵相乘条件,相乘结果numpy.shape(list3)满足“左列右行”
2.numpy数据结构:
Array: 产生array: data=np.array([[1, 9, 6], [2, 8, 5], [3, 7, 4]]) data=np.array(list1) data1 = np.zeros(5) #data1.shape = (5,),5列 data1 = np.eye(5) 索引array: datacut = data[0,2] #取第零行第二列,此处是6 切片array: datacut = data[0:2,2] # array([6, 5]) array长度: data.shape data.size np.shape(data) np.size(data) len(data) array拼接: #括号内也有一个括号(中括号或者小括号)! d = np.concatenate((data,data)) d = np.concatenate((data,data),axis = 1) #对应行拼接 array加法:逐个相加 array乘法: d = data data #逐个相乘 d = np.dot(data,data) #矩阵相乘 d = data 3 #每个元素乘3 d = np.dot(data,3) #每个元素乘3 array矩阵运算: 取逆 : np.linalg.inv(data) 转置:data.T 所有元素求和 : np.sum(data) 生成随机数:np.random.normal(loc=0, scale=10, size=None) 生成标准正态分布随机数组:np.random.normal(size=(4,4)) 生成二维随机数组: np.random.multivariate_normal([0,0],np.eye(2)) 生成范围在0到1之间的随机矩阵(M,N): np.random.randint(0,2,(M,N))
Matrix: 创建matrix: mat1 = np.mat([[1, 2, 3], [4, 5, 6]]) mat1 = np.mat(list) mat1 = np.mat(data) matrix是二维的,所有+,-,*都是矩阵操作。 matrix索引和分列: mat1[0:2,1] matrix转置: np.transpose(mat1) mat1.transpose() matrix拼接: np.concatenate([mat1,mat1]) np.concatenate([mat1,mat1],axis = 1)
numpy数据结构总结:对于numpy中的数据结构的操作方法基本相同: 创建:np.mat(list),np.array(list) 矩阵乘:np.dot(x,y) 转置:x.T or np.transpose(x) 拼接:np.concatenate([x,y],axis = 1) 索引:mat[0:1,4],ary[0:1,4]
3.pandas数据结构: Series: 创建series: s = pd.Series([[1,2,3],[4,5,6]],index = [‘a’,‘b’]) 索引series: s1 = s[‘b’] 拼接series: pd.concat([s1,s1],axis = 1) #也可使用s.append(s)
DataFrame: 创建DaraFrame: df = pd.DataFrame([[1,2,3],[1,2,3]],index = ['a','b'],columns = ['x','y','z']) df取某一列: dfc1 =df.x dfc1 = df[‘x’] dfc2 = df.iloc[:,0] #用.iloc方括号里是数字而不是column名! dfc2 = df.iloc[:,0:3] df取某一行: dfr1 = df.iloc[0] df1 = df.iloc[0:2] df1 = df[0:2] #这种方法只能用于取一个区间 df取某个值: dfc2 = df.iloc[0,0] dfc2 = df.iloc[0:2,0:3]