python panda 库_Python之Pandas库

import pandas as pd

Series类型数据

Series数据的创建

s=pd.Series([9, 8, 7, 6, 5])

显示s如下:

0    9

1    8

2   7

3   6

4   5

左边一列为索引值,右边一列为值

s.values --- 显示值的那部分

s.index ---- 显示索引号的那部分

s.index=['a', 'b', 'c', 'd', 'e'] ---- s的索引可以修改为'a' 'b' 'c' 'd' 'e'

Dict={'h':1, 'g':2, 'r':3}  这个字典可以转换为Series类型数据,通过pd.Series(Dict)

s.describe( ) --- 用于对s进行相关统计,例如count(一列数据的个数), mean(一列数据的均值), std(数据方差), min, max, 25%(一列数据中前25%的数据的分位数, 50%, 75%

array1=np.array([1, 2, 3, 4, np.nan]),  s=pd.Series(array1, index=['one', 'two', 'three', 'four', 'five']) --- 利用numpy数组创建series数据

Series数据的访问

array1=np.array([1, 2, 3, 4, np.nan]),  s=pd.Series(array1, index=['one', 'two', 'three', 'four', 'five'])

s[0] --- 利用下标,类似数组,s[0]=1

s['one']--- 利用索引值,s['one']=1

s[[0, 2]] --- s[[0, 2]] = one     1        返回的依然是Series数据

three   3

s[['two', 'four']] ---- s[['two', 'four']] = two     2    返回的依然是Series数据

four     4

s1=pd.Series([5, 6, 7]), s.append(s1) ---  s1被添加到s的后面,但是s1的下标不变

s1=pd.Series([5, 6, 7]), s.append(s1, ignore_index=True) ---  s1被添加到s的后面,整个数据的下标统一重新编号了

s * 3 或 s+s --- 整个Series数据每个元素都会被分别操纵,类似数组

s[s>3] --- 将布尔条件作为索引访问数据

np.abs(s), np.square(s)等等 ---- 类似的numpy中的函数可以对Series类型的数据进行操作

s[1:3] --- 这里利用下标切片操作取的是第1个数据和第2个数据,第3个数据取不到,左闭右开

s['one':'three'] --- 这里利用索引值切片操作取的是第0、1、2个数据,左闭右闭

np.nan --- 可以定义缺失值

pd.isnull(s) 或 s.isnull( ) --- 判断s中是否有缺失值

s[s.isnull()==True] --- 获得s中的缺失值

notnull() --- 与上面的isnull()用法类似,但是意义相反

s.drop(0) --- 返回删除下标为0的数据之后的Series数据,不过s本身没被修改

s.drop([1,2]) --- 返回删除了下标为1、2的数据之后的Series数据,不过s本身没被修改

s.drop([1,2], inplace=True) --- 返回删除了下标为1、2的数据之后的Series数据,s本身也被修改过了

***************************************************************************************************

Dataframe类型数据

Dataframe数据的创建

如果Series数据是一维数组,那么DataFrame数据就是二维数组

DatatFram数据每一行有行名,每一列有列名

data={'a':[1,2,3],'b':[4,5,6],'c':[1,1,1]}

df=pd.DataFrame(data) --- 利用字典构造DataFrame数据,这里列名为'a' 'b' 'c',但是行名为下标从0开始的序号

array1=np.arange(25).reshape(5,5)

df=pd.DataFrame(array1) --- 利用numpy的数组生成DataFrame数据,这里行名和列名都是下标从0开始的序号

df=pd.DataFrame(array1, columns=['a', 'b', 'c', 'd', 'e'], index=['q', 'w', 'r', 't', 'y']) ---  生成DataFrame数据,行名和列名分别为index和columns

Dataframe数据的属性

df.index --- 得到行名

df.columns --- 得到列名

df.info( ) --- 得到df的基本信息

df.axes --- 得到行名和列名

df.ndim --- 得到df的维度

df.shape --- 得到df的尺寸,也就是多少行多少列,返回的是元组

df.size --- 得到df中所有数据的数量

df.values --- 得到df中所有数据,没有行名和列名,返回的是numpy的数组

df.dtypes --- 返回所有列的数据类型

df[a'].dtype --- 返回指定列名为'a'的这列的数据类型

df[['a', 'b']].dtypes --- 返回指定列名为'a'和'b'的这些列的数据类型

df.T 或者 df.transpose --- 二维数组的转置

Dataframe数据的访问

df=pd.DataFrame(array1, columns=['a', 'b', 'c', 'd', 'e'], index=['q', 'w', 'r', 't', 'y'])

df.columns.values --- 得到列名,返回的是numpy数组

df.columns.values[0] = 'a' --- 返回第0列的列名

df['a'] --- 返回列名为'a'的这列的数据,返回的Series数据

df[['b', 'c']] --- 返回列名为'b'和'c'的这两列的数据,返回的仍然是DataFrame数据

df['Welcome']=[1, 2, 3, 4, 5] --- 添加一列新的数据

pd.concat([df, df1], axis=1) --- 连接df和df1,列增加,行不变,水平方向增加

pd.concat([df,df1], ignore_index=True, axis=1) --- 连接df和df1,列增加,行不变,水平方向增加,所有列名被修改为从0开始的下标形式

df[0:2] --- 返回第0行到第1行的两行数据,返回的是DataFrame数据

df.loc[['q', 'w']] --- 返回行名为'q'和'w'的两行数据,返回的是DataFrame数据

这里loc[]的括号中只能是索引值,而不能是下标序号,如果索引值在创建DataFrame数据时缺省,那么括号中索引值就是下标序号

df.loc['Hello']=[1, 2, 3, 4, 5] --- 添加一个新行,行名为'Hello'

df.loc[0:2, ['b', 'c']] --- 返回第0到1行的数据,并且是需要切片截取列名是'b'和'c'的这些数据,返回DataFrame数据

df[0:2][['b', 'c']] --- 返回第0到1行的数据,并且是需要切片截取列名是'b'和'c'的这些数据,返回DataFrame数据

df.iloc[:,1:] --- 返回所有行且第1列后的所有数据,返回DataFrame数据

这里iloc[]的括号中都是下标序号

df.iloc[0] --- 返回第0行的所有数据,返回DataFrame数据

df.iloc[1:4] --- 返回第1行到第3行的数据,返回DataFrame数据

df.iloc[[0,3]] --- 返回第0行、第3行的两行数据,返回DataFrame数据

df.iloc[2,3] --- 返回第2行且第3列的数据,返回的就是一个值

df.iloc[0:2,1:4] --- 返回第0行到第1行,并且要求是第1列到第3列的数据,返回DataFrame数据

df=pd.DataFrame(array1, columns=['a', 'b', 'c', 'd', 'e'], index=['q', 'w', 'r', 't', 'y'])

df.drop('b', axis='columns') --- 删除列名为'b'的这列数据,而df本身不被修改

df.drop('b', axis=1) --- 删除列名为'b'的这列数据,而df本身不被修改

df.drop('b', axis=1, inplace=True) --- 删除列名为'b'的这列数据,而df本身也被修改

del df['b'] --- 删除列名为'b'的这列数据,而df本身也被修改

df.drop(1, axis=0) --- 删除第1行的数据,而df本身不被修改

df.drop(1, axis='index') --- 删除第1行的数据,而df本身不被修改

df.drop([1,2], axis=0) --- 删除第1行和第2行的数据,而df本身不被修改

注意:在进行运算的时候,例如max sum min mean等等,axis=1会有在行方向上的感觉,而axis=0会有在列方向上的感觉

df.append(df1) --- 添加df1到df后面, df的行增加,列不变,下标不统一修改

df.append(df1, ignore_index=True) --- 添加df1到df后面, df的行增加,列不变,下标被统一修改

注意:这里如果df1和df在尺寸上不一致,那么会将一些值补充为NaN

df.head(n) --- 显示df前n行数据, n如果缺省,则仅仅显示前5行

df.tail(n) --- 显示df最后n行数据,同样,n如果缺省,则仅仅显示最后5行

df.describe( ) --- 显示df中的统计信息,这里和Series类型中的describe函数一样

df['a'].max( ), df['a'].min( ), df['a'].mean( ) --- 利用max, min, mean等等函数计算列名为'a'的这列的一些统计结果

df['a'].count( ) --- 统计列名为'a'的这列的数据的数量

df['a'].value_counts( ) --- 给出列名为'a'的这列不同数据值的数量,这个函数非常有用

df['a'].value_counts(ascending=True) --- 给出列名为'a'的这列不同数据值的数量,并且数量按升序排列,如果ascending=False,则降序排列

df['a'].value_counts(normalize=True, ascending=True) --- 给出列名为'a'的这列不同数据值的数量,并且数量按升序排列,数据都按百分比正则化

df[df.q>100] --- 取df中列名为'q'的所有大于100的数据

df[df.q>100].count() --- 统计df中列名为'q'的所有大于100的数据的数量

df[df.q>100][df.w<100] --- 取df中列名为'q'的大于100的数据,并且还需要满足在列名是'w'的数据必须小于100

df[df.q>100][df.w<100].r.max( ) --- 在df中列名为'q'的大于100,并且还需要满足在列名是'w'的小于100的数据中,它们在列名为'r'的这列上的最大值

这种有条件的访问数据或切片取数据,其中用的方法或函数,可以根据需求进行修改

df.sort_values(by='q') --- 按列名为'q'的这列数据的升序排列df中的所有数据

df.sort_values(by='q', ascending=True/False) --- 设置排序为升序或降序,并把列名为'q'的这列数据的按指定方式进行排列

df.sort_values(by=['q', 'w'], ascending=[False, True]) --- 对列名为'q'和'w'的这些列,按照ascending指定的排序方式将所有数据进行排列

df['q'].agg(['min', 'mean', 'max', np.min]) --- 对列名为'q'的这列数据求min mean max min,返回DataFrame数据

df['q'].mode( ) 或 df['q'].agg('mode') --- 求列名为'q'的这列数据的值中出现频率最大的

df['q'].agg(['skew', 'kurt']) --- 求'q'这列数据的偏度和峰度

df[['q', 'w']].agg(['max', 'min']) --- 求'q'和'w'这两列数据的最大和最小值

df.agg({'q':['mode', 'mean'], 'w':['max', 'min']}) --- 对'q'这列求mode mean,对'w'这列求max min

df.groupby('q').max( ) --- 对列'q'的数据进行分组,再对每个分组的所有数值列求max

df.groupby('q')[['w']].min( ) --- 对列'q'的数据进行分组,然后对每个分组的列'w'求min,返回的是DataFrame

df.groupby('q')['w'].min( ) --- 对列'q'的数据进行分组,然后对每个分组的列'w'求min,返回的是Series

df.groupby('q')[['w', 'r']].agg(['max', 'min']) --- 对列'q'的数据进行分组,然后对每个分组的列'w'和'r'求min、max,返回的是DataFrame

df.query("q=='H'") --- 查询得到列'q'上等于'H'的所有数据

x=1, df.quey("w==@x) --- 查询得到列'w'上等于变量x的值的所有数据

df.sample(n) --- 从df中随机抽取n行数据

df.dropna( ) --- 从df中删除带有Nan值的数据行,存在Nan就删除

df.dropna(how='all') --- 整行或整列都是Nan时,则删除这个行或列

df.dropna(axis=1, how='all') --- 整列都是Nan时,则删除这个列

df.dropna(axis=1, how='any') --- 这要整列存在Nan时,就删除这个列

isnull( ), df.notnull( ) --- 判断是否有或没有缺失值Nan

fullna(n) --- 用指定的值n填充缺失值Nan

df.pivot_table( ) --- 这个函数等用到再补充

Panda读写文件

read_csv( ), to_csv( ) --- 读写csv文件、读写txt文件

read_excel( ), to_excel( ) --- 读写excel文件

read_html( ), to_html( ) --- 读写html文件

read_json( ), to_json( ) --- 读写json文件

read_sql( ), to_sql( ) --- 读写sql脚本文件

注意:这里读写函数有很多参数,以后用到再补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas.read_excel是一个用于读取Excel文件的函数。它可以接受多个参数来指定读取的方式和选项。其中一些常用的参数包括io、sheet_name、header、index_col等。\[2\] 在引用\[1\]中的代码中,io参数用于指定要读取的Excel文件。可以使用ExcelFile函数来创建一个Excel文件对象,然后将该对象传递给read_excel函数。在这个例子中,还使用了storage_options和engine参数来指定存储选项和引擎。 如果在使用pandas.read_excel函数时遇到了报错,可以检查报错信息以确定问题所在。常见的报错可能包括文件路径错误、文件格式不正确、缺少依赖等。可以根据报错信息来逐步解决问题。 如果你遇到了类似的问题,可以提供更具体的报错信息,我可以帮助你找到解决方案。 #### 引用[.reference_title] - *1* *3* [已解决Python pandas.read_excel读取Excel文件报错](https://blog.csdn.net/yuan2019035055/article/details/128454430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [最新Pandas.read_excel()全参数详解(案例实操,如何利用python导入excel)](https://blog.csdn.net/weixin_30976201/article/details/111907694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值