肝了几天,十分钟入门pandas(上)

简介: 肝了几天,十分钟入门pandas(上)

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

基础包导入

这个一篇针对pandas新手的简短入门,想要了解更多复杂的内容,参阅Cookbookhttps://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html

通常,我们首先要导入以下几个库:

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

创建对象

通过传递一个list来创建Series,pandas会默认创建整型索引:

s = pd.Series([1,3,5,np.nan,6,8])
s

image.png

通过传递一个numpy array,日期索引以及列标签来创建一个DataFrame

dates = pd.date_range('20130101', periods=6)
dates

image.png

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df

image.png

通过传递一个能够被转换为类似series的dict对象来创建一个DataFrame:

df2 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20130102'),
                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                     'D' : np.array([3]*4,dtype='int32'),
                     'E' : pd.Categorical(["test","train","test","train"]),
                     'F' : 'foo' })
df2

image.png

可以看到各列的数据类型为:

df2.dtypes

image.png

查看数据

查看frame中头部和尾部的几行:

df.head()

image.png

df.tail(3)

image.png

显示索引、列名以及底层的numpy数据

df.index

image.png

df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
df.values

image.png

describe()能对数据做一个快速统计汇总

df.describe()

image.png

对数据做转置:

df.T

image.png

按轴进行排序:

df.sort_index(axis=1, ascending=False)

image.png

按值进行排序 :

df.sort_values(by='B')

image.png

数据选择

注意:虽然标准的Python/Numpy的表达式能完成选择与赋值等功能,但我们仍推荐使用优化过的pandas数据访问方法:.at,.iat,.loc,.iloc和.ix

选取

选择某一列数据,它会返回一个Series,等同于df.A

df['A']

image.png

通过使用**[ ]**进行切片选取:

df[0:3]

image.png

df['20130102':'20130104']

image.png

通过标签选取

通过标签进行交叉选取:

df.loc[dates[0]]
A   -0.900524
B   -0.302515
C   -0.541762
D    1.562916
Name: 2013-01-01 00:00:00, dtype: float64

使用标签对多个轴进行选取

df.loc[:,['A','B']]

image.png

df.loc[:,['A','B']][:3]

image.png

进行标签切片,包含两个端点

df.loc['20130102':'20130104',['A','B']]

image.png

对于返回的对象进行降维处理

df.loc['20130102',['A','B']]
A   -0.884117
B   -0.650741
Name: 2013-01-02 00:00:00, dtype: float64

获取一个标量

df.loc[dates[0],'A']
-0.9005238449408509

快速获取标量(与上面的方法等价)

df.at[dates[0],'A']
-0.9005238449408509

通过位置选取

通过传递整型的位置进行选取

df.iloc[3]
A    1.260276
B    1.000297
C    0.809801
D   -0.389713
Name: 2013-01-04 00:00:00, dtype: float64

通过整型的位置切片进行选取,与python/numpy形式相同

df.iloc[3:5,0:2]

image.png

只对行进行切片

df.iloc[1:3,:]

A B C D
2013-01-02 -0.884117 -0.650741 0.217345 0.268915
2013-01-03 0.220822 0.790527 0.692172 0.723441

只对列进行切片

df.iloc[:,1:3]

B C
2013-01-01 -0.302515 -0.541762
2013-01-02 -0.650741 0.217345
2013-01-03 0.790527 0.692172
2013-01-04 1.000297 0.809801
2013-01-05 1.468609 0.360648
2013-01-06 0.235352 1.117395

只获取某个值

df.iloc[1,1]
-0.6507407272837356

快速获取某个值(与上面的方法等价)

df.iat[1,1]
-0.6507407272837356

布尔索引

用某列的值来选取数据

df[df.A > 0]

image.png

where操作来选取数据

df[df > 0]

image.png

用**isin()**方法来过滤数据

df2 = df.copy()
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df2

image.png

df2[df2['E'].isin(['two', 'four'])]

image.png

赋值

赋值一个新的列,通过索引来自动对齐数据

s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102',periods=6))
s1
2013-01-02    1
2013-01-03    2
2013-01-04    3
2013-01-05    4
2013-01-06    5
2013-01-07    6
Freq: D, dtype: int64
df['F'] = s1
df

image.png

通过标签赋值

df.at[dates[0], 'A'] = 0
df

image.png

通过位置赋值

df.iat[0,1] = 0
df

image.png

通过传递numpy array赋值

df.loc[:,'D'] = np.array([5] * len(df))
df

image.png

通过where操作来赋值

df2 = df.copy()
df2[df2 > 0] = -df2
df2

image.png

缺失值处理

在pandas中,用np.nan来代表缺失值,这些值默认不会参与运算。

reindex()允许你修改、增加、删除指定轴上的索引,并返回一个数据副本。

df1 = df.reindex(index=dates[0:4], columns=list(df.columns)+['E'])
df1.loc[dates[0]:dates[1],'E'] = 1
df1

image.png

剔除所有包含缺失值的行数据

df1.dropna(how='any')

image.png

填充缺失值

df1.fillna(value=5)

image.png

获取值是否为nan的布尔标记

pd.isnull(df1)

image.png

运算

统计

运算过程中,通常不包含缺失值。

进行描述性统计

df.mean()

image.png

对其他轴进行同样的运算

df.mean(1)

image.png

对于拥有不同维度的对象进行运算时需要对齐。除此之外,pandas会自动沿着指定维度计算。

s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)
s

image.png

df.sub(s, axis='index')

image.png

Apply 函数作用

通过apply()对函数作用

df.apply(np.cumsum)

image.png

df.apply(lambda x:x.max()-x.min())

image.png

频数统计

s = pd.Series(np.random.randint(0, 7, size=10))
s

image.png

s.value_counts()

image.png

字符串方法

对于Series对象,在其str属性中有着一系列的字符串处理方法。就如同下段代码一样,能很方便的对array中各个元素进行运算。值得注意的是,在str属性中的模式匹配默认使用正则表达式。

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
s.str.lower()


相关文章
|
6天前
|
数据可视化 数据挖掘 C++
一文入门数分三剑客--Numpy、Pandas、Matplotlib
一文入门数分三剑客--Numpy、Pandas、Matplotlib
|
6天前
|
索引 Python
【Pandas】- pandas入门
【Pandas】- pandas入门
|
7月前
|
索引 Python
pandas 入门
pandas 入门
96 0
pandas 入门
|
6天前
|
数据挖掘 数据处理 索引
Pandas数据处理——渐进式学习1、Pandas入门基础
Pandas数据处理——渐进式学习1、Pandas入门基础
55 0
|
7月前
|
SQL 数据挖掘 数据库
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入操作
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入导出操作
131 0
|
7月前
|
机器学习/深度学习 人工智能 数据挖掘
【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?
【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?
|
9月前
|
数据挖掘 索引 Python
使用Pandas进行数据清理的入门示例
数据清理是数据分析过程中的关键步骤,它涉及识别缺失值、重复行、异常值和不正确的数据类型。获得干净可靠的数据对于准确的分析和建模非常重要。
68 0
|
6天前
|
SQL 数据采集 数据可视化
使用Python Pandas实现两表对应列相加(即使表头不同)
使用Python Pandas实现两表对应列相加(即使表头不同)
23 3
|
2天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
【5月更文挑战第19天】在 Python 数据分析中,pandas DataFrame 是核心工具。本文介绍了几个高级技巧:1) 横向合并 DataFrame;2) 数据分组与聚合;3) 处理缺失值;4) 数据重塑;5) 条件筛选;6) 使用函数处理数据。掌握这些技巧能提升数据处理效率和分析深度,助你更好地发掘数据价值。
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
|
6天前
|
数据采集 数据可视化 数据挖掘
利用Python和Pandas库优化数据分析流程
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要依据。Python作为一种强大且易于上手的编程语言,配合Pandas这一功能丰富的数据处理库,极大地简化了数据分析的流程。本文将探讨如何利用Python和Pandas库进行高效的数据清洗、转换、聚合以及可视化,从而优化数据分析的流程,提高数据分析的效率和准确性。