pandas包教程(持续更新ing...)

诸神缄默不语-个人CSDN博文目录

pandas是数据科学中常用的Python包。

pandas官网:pandas - Python Data Analysis Library
pandas文档官网:pandas documentation — pandas 1.4.2 documentation

1. 安装

如果使用anaconda作为Python虚拟环境管理工具,则其base环境中会直接默认安装pandas包,这也是pandas官网getting started页面中介绍的方法:pandas - Python Data Analysis Library
anaconda的安装和使用此处不再赘述。

如果不是anaconda的base环境,则可以参考pandas文档中安装部分的介绍来进行安装:Installation — pandas 1.4.2 documentation
pandas官方支持Python3.8, 3.9和3.10版本。
直接在虚拟环境中用conda安装即可:conda install pandas

2. 导入导出

2.1 xlsx后缀的Excel文件

导入data=pd.read_excel('file.xlsx')
https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html

入参:

  • 文件名
  • sheet_name: str, int, list, or None, default 0
  • skiprows=[1,2]:跳过索引为1、2的行

2.2 SQL

导出
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

入参:

  • if_exists:如果表已经存在,将如何处理新的数据
    • fail
    • append:添加到尾部

2.3 CSV文件

导入
train = pd.read_csv(文件路径)

入参:

  • nrows:只传入几行数据

3. 处理pd.DataFrame格式的对象

3.0 属性

  1. colomns:列名
  2. empty:布尔值

3.1 新建表格

3.2 合并表格

  1. 两个表格列相同,直接把一个表格的元素完全添加到另一个后面,并直接重置索引:table3=pd.concat([table1,table2],ignore_index=True)

3.3 取出数据

3.3.1 按列取

  1. 按照列名组成的列表来取出对应列:table2=table1[['col1','col2','col3']]

3.3.2 按行取

df.loc[1]
df.iloc[1]

3.3.3 按行列坐标取

dataframe.loc[1, 'c']
dataframe.iloc[1, 3]

一次取多条:data1[114:116][['preclose','close']]

3.3.4 按条件取

  1. 删除DataFrame中col1一列中元素满足条件的行
    1. 直接用匿名函数实现,如条件是含有英文字母(实现效果是保留没有英文字母的行):table2=table1[table1['col1'].apply(lambda x:not bool(re.search('[a-zA-Z]',x)))]

3.4 查看与分析数据

  1. 查看描述性信息:table1.info()
    输出示例:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9959 entries, 0 to 9958
Data columns (total 25 columns):
 #   Column         Non-Null Count  Dtype         
---  ------         --------------  -----         
 0   days_act       9959 non-null   int64         
 1   days_plan      9959 non-null   int64         
 2   profit_pero    9959 non-null   int64         
 3   sales_pred     9959 non-null   int64         
 4   sales_perc     9959 non-null   int64         
 5   shipment       9959 non-null   object        
 6   records        9959 non-null   int64         
 7   profit_rate    9959 non-null   float64       
 8   product_name   9959 non-null   object        
 9   profit         9959 non-null   int64         
 10  shipment_date  9959 non-null   datetime64[ns]
 11  country        9959 non-null   object        
 12  region         9959 non-null   object        
 13  city           9959 non-null   object        
 14  sub_category   9959 non-null   object        
 15  customer_name  9959 non-null   object        
 16  discount       9959 non-null   float64       
 17  num            9959 non-null   int64         
 18  province       9959 non-null   object        
 19  category       9959 non-null   object        
...
 23  post_method    9959 non-null   object        
 24  sales_act      9959 non-null   int64         
dtypes: datetime64[ns](2), float64(2), int64(9), object(12)
memory usage: 1.9+ MB
  1. 查看前面几行:table1.head()(默认打印5行)
  2. 查看最后几行:table1.tail()(默认打印5行)
  3. 查看某一列有多少种取值:table1['col1'].nunique()
  4. 查看某一列的所有取值:table1['col1'].unique()
  5. 查看某一列所有取值与对应数目:table1['col1'].value_counts()(默认降序排列)
  6. 查看某一列的缺失值总数:table1['col1'].isna().sum()
  7. df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=<no_default>, closed=None, step=None, method='single')

3.5 缺失值填充

  1. 直接将title列的缺失值(None)置为空字符串:train['title'] = train['title'].fillna('')
  2. df.dropna(*, axis=0, how=<no_default>, thresh=<no_default>, subset=None, inplace=False, ignore_index=False)
    删除含有缺失值的行或列

3.6 删除

按列删除:df.drop(['col1','col2','col3'],axis=1,inplace=True)
inplace设置是否要在原变量上直接做修改

3.7 内置处理函数

  1. df.mean()

3.8 其他

  1. 重置索引,且不保留原始索引:table2=table1.reset_index(drop=True)
  2. 检测某一个应该是str格式的元素是否是空值:isinstance(factor,str) or not np.isnan(factor)
  3. 转换数据格式
    1. DataFrame.astype(dtype, copy=None, errors='raise')
    2. pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, exact=_NoDefault.no_default, unit=None, infer_datetime_format=_NoDefault.no_default, origin='unix', cache=True)

4. 处理pd.Series格式的对象

类似dict的键值对格式

索引:index
值:value

0. 属性

  1. empty:布尔值

1. 创建

  1. DataFrame列实际上就是Series,所以经常对DataFrame列进行操作之后,返回值就是Series
    比如:data['shipment_date']-data['order_date']

2. 修改

  1. map(arg, na_action=None):对元素值进行批量处理

3. 查看与分析数据

  1. 求和:sum()
  2. 最大值:max()
  3. 最小值:min()
  4. 不重复值(返回np.array):unique()
  5. 不重复值和对应出现次数:value_counts()

5. pandas类函数

  1. to_numeric(arg, errors='raise', downcast=None, dtype_backend=_NoDefault.no_default)
    将arg转换为数值类型
    1. arg:可以是pd.Series对象
  2. pivot_table(df, index=['Manager', 'Rep'], values=['Price'], aggfunc=np.sum)
    参考教程:使用Pandas 玩转透视表(pivot_table)
  3. pd.notnull(obj)pd.notna(obj)

6. 常见bug和警告

  1. 没有安装openpyxl,需要自己安。安完之后再重新运行代码,还是会报这个警告(在运行read_excel()时报警告):在这里插入图片描述
    但是据我观察不影响后续程序运行,所以我也不管了。

7. 用modin加速

安装:pip install "modin[all]"

使用时直接替换pandas导入代码就可以:import modin.pandas as pd

官方GitHub项目:https://github.com/modin-project/modin

8. 本文撰写过程中参考的网络资料

  1. pandas中DataFrame 数据合并,连接(merge,join,concat)_dataframe merge on index_Paulzhao6518的博客-CSDN博客
  2. Python中布尔值Bool的取反问题 - 知乎
  3. 详解 Pandas 与 Lambda 结合进行高效数据分析_AI科技大本营的博客-CSDN博客
  4. python3 判断字符串是否包含中英文和数字_Saggitarxm的博客-CSDN博客
  5. pandas重置DataFrame或Series的索引index_series 去除index_不论如何未来很美好的博客-CSDN博客
  6. pandas中对nan空值的判断和陷阱_pandas nan判断_S_o_l_o_n的博客-CSDN博客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值