Python之Pandas使用详解

Pandas

在数据分析当中,我们通常使用 Pandas 来做数据清理的工作。在真实的工作生活中,我们拿到的数据往往都是不整洁的,空值、重复值、无效值等等信息都会干扰我们的分析,此时我们就需要按部就班的完成数据的清理。数据清理是数据分析中非常重要的一步,也是非常繁琐的一步,当然,在你掌握了 Pandas 库之后,你就好像是得到了一把削铁如泥的宝剑,数据清理工作的效率会大大提高。

数据结构

Pandas 主要有两种数据结构,分别是 Series 和 DataFrame,他们分别表示一维的序列和二维的表结构。

维数名称描述
1Series可以看做有标签(默认是整数序列 RangeIndex;可以重复)的一维数组(同类型)。是 scalars(标量) 的集合,同时也是 DataFrame 的元素。
2DataFrame一般是二维标签,尺寸可变的表格结构,具有潜在的异质型列。

Series

Series 是一个定长的字典序列。它相当于是两个 ndarray,一个代表 index,一个代表 values。

import pandas as pd
s = pd.Series(data, index=index)

此处的 data,可以是如下的数据类型:

  • Python 中的 dict

  • 一个 ndarray

  • 一个标量,比如:4

而 index 的默认值是 0,1,2… 递增的整数序列。

指定 index

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
print(s)
>>>
a   -0.595567
b   -0.201314
c    1.516812
d    0.102395
e   -1.009924
dtype: float64

不指定 index

s1 = pd.Series(['a', 'b', 'c', 'd'])
print(s1)
>>>
0    a
1    b
2    c
3    d
dtype: object

通过字典来创建 Series

d= {'a': 1, 'b': 2, 'c': 3}
s2 = pd.Series(d)
print(s2)
>>>
a    1
b    2
c    3
dtype: int64

DataFrame

DataFrame 是一个二维的数据结构,可以把它理解为数据表格或者是 SQL 表,或者是由 Series 对象组成的字典。

d = {"Chinese": [80, 85, 90], "Math": [85, 70, 95], "English": [90, 95, 90]}
df1 = pd.DataFrame(d)
print(df1)
df2 = pd.DataFrame(d, index=['zhangsan', 'lisi', 'wangwu'])
print(df2)
print(df2.columns, df2.index)
>>>
   Chinese  Math  English
0       80    85       90
1       85    70       95
2       90    95       90
          Chinese  Math  English
zhangsan       80    85       90
lisi           85    70       95
wangwu         90    95       90
Index(['Chinese', 'Math', 'English'], dtype='object') Index(['zhangsan', 'lisi', 'wangwu'], dtype='object')

通过 index 选择 DataFrame 中的数据

操作语法结果类型
选择某一列df[col]Series
通过标签选择某一行df.loc[label]Series
通过标签位置选择某一行df.iloc[loc]Series
切片获取某些行df[5:10]DataFrame
通过布尔向量获取某些行df[bool_vec]DataFrame

代码

print(df2['Chinese'], '\n')
print(df2.loc['zhangsan'], '\n')
print(df2.iloc[-1], '\n')
print(df2[0:2], '\n')
print(df2[df2>85], '\n')
>>>
zhangsan    80
lisi        85
wangwu      90
Name: Chinese, dtype: int64 Chinese    80
Math       85
English    90
Name: zhangsan, dtype: int64 Chinese    90
Math       95
English    90
Name: wangwu, dtype: int64           Chinese  Math  English
zhangsan       80    85       90
lisi           85    70       95           Chinese  Math  English
zhangsan      NaN   NaN       90
lisi          NaN   NaN       95
wangwu       90.0  95.0       90 

基本使用

读取/保存数据

读取数据

df = pd.read_csv("test.csv")
print(df.head())
print('\n')
print(type(df))
>>>
       name   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0       NaN
2    wangwu  25.0  100000.0
3   zhaoliu   NaN      32.0
4      maqi  33.0      60.0
<class 'pandas.core.frame.DataFrame'>

保存数据

df.to_csv('my.csv')
df.to_excel('my.xlsx')

查看数据

print(df.index, '\n')
print(df.columns, '\n')
print(df.to_numpy(), '\n')
print(df.describe())
>>>
RangeIndex(start=0, stop=5, step=1) Index(['name', 'age', 'score'], dtype='object') [['zhangsan' 30.0 80.0]
 ['lisi' 20.0 nan]
 ['wangwu' 25.0 100000.0]
 ['zhaoliu' nan 32.0]
 ['maqi' 33.0 60.0]]              age          score
count   4.000000       4.000000
mean   27.000000   25043.000000
std     5.715476   49971.337211
min    20.000000      32.000000
25%    23.750000      53.000000
50%    27.500000      70.000000
75%    30.750000   25060.000000
max    33.000000  100000.000000

describe 是非常常用的函数,可以通过它来在整体上查看数据的全貌,有助于了解数据。

排序

按轴排序

print(df.sort_index(axis=1, ascending=False))
>>>
      score      name   age
0      80.0  zhangsan  30.0
1       NaN      lisi  20.0
2  100000.0    wangwu  25.0
3      32.0   zhaoliu   NaN
4      60.0      maqi  33.0

按数值排序

print(df.sort_values(by='score'))
>>>
       name   age     score
3   zhaoliu   NaN      32.0
4      maqi  33.0      60.0
0  zhangsan  30.0      80.0
2    wangwu  25.0  100000.0
1      lisi  20.0       NaN

缺失值

查看缺失值

print(df.isnull(),'\n')
print(df.isnull().any())
>>>
    name    age  score
0  False  False  False
1  False  False   True
2  False  False  False
3  False   True  False
4  False  False  False name     False
age       True
score     True
dtype: bool

可以方便的看出数据中,哪些列是存在空值的。

删除/填充空值

df1 = df.copy()
print(df1, '\n')
print(df1.dropna(how='any'), '\n')
print(df1.fillna(value=50))
>>>
       name   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0       NaN
2    wangwu  25.0  100000.0
3   zhaoliu   NaN      32.0
4      maqi  33.0      60.0        name   age     score
0  zhangsan  30.0      80.0
2    wangwu  25.0  100000.0
4      maqi  33.0      60.0        name   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0      50.0
2    wangwu  25.0  100000.0
3   zhaoliu  50.0      32.0
4      maqi  33.0      60.0

常用操作

重命名列

df1.rename(columns={'name': 'student'}, inplace = True)
print(df1)
>>>
    student   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0       NaN
2    wangwu  25.0  100000.0
3   zhaoliu   NaN      32.0
4      maqi  33.0      60.0

删除列/行

df1 = df1.drop(columns=['age'])
print(df1, '\n')
df1 = df1.drop(index=[1])
print(df1)
>>>
    student     score
0  zhangsan      80.0
1      lisi       NaN
2    wangwu  100000.0
3   zhaoliu      32.0
4      maqi      60.0     student     score
0  zhangsan      80.0
2    wangwu  100000.0
3   zhaoliu      32.0
4      maqi      60.0

去除重复值

df = df.drop_duplicates() # 去除重复行

修改数据格式

df1['score'].astype('str')

apply 函数的应用
apply 用来将函数应用到数据上。

df2 = df1['score'].apply(lambda x: x * 2)
print(df2)
>>>
0       160.0
2    200000.0
3        64.0
4       120.0
Name: score, dtype: float64

以上代码等价于

list(map(lambda x: x*2, df1['score']))
>>>
[160.0, 200000.0, 64.0, 120.0]

由此可以看出,apply 是一个高效且简洁的函数,可以快速把函数作用到每个元素之上。

直方图化

所谓的直方图化,就是函数 value_counts,该函数可以查看数据中,每列中有多少不同值,且各个不同值出现的次数

print(df, '\n')
df3 = df.fillna(60)
df3.loc[5] = ['qianba', 20, 80]  # 新增一行
print(df3['score'].value_counts())
>>>
       name   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0       NaN
2    wangwu  25.0  100000.0
3   zhaoliu   NaN      32.0
4      maqi  33.0      60.0 60.0        2
80.0        2
32.0        1
100000.0    1
Name: score, dtype: int64

表格合并及分组

合并

1、使用 concat 连接两个 Pandas 对象

print(df3, '\n')
df4 = df3.copy()
df3 = pd.concat([df3, df4], ignore_index=True)
print(df3)
>>>
       name   age     score
0  zhangsan  30.0      80.0
1      lisi  20.0      60.0
2    wangwu  25.0  100000.0
3   zhaoliu  60.0      32.0
4      maqi  33.0      60.0
5    qianba  20.0      80.0         name   age     score
0   zhangsan  30.0      80.0
1       lisi  20.0      60.0
2     wangwu  25.0  100000.0
3    zhaoliu  60.0      32.0
4       maqi  33.0      60.0
5     qianba  20.0      80.0
6   zhangsan  30.0      80.0
7       lisi  20.0      60.0
8     wangwu  25.0  100000.0
9    zhaoliu  60.0      32.0
10      maqi  33.0      60.0
11    qianba  20.0      80.0

2、使用 merge 函数

基于某一列进行连接

left = pd.DataFrame({'key': ['foo', 'bar', 'loo'], 'lval': [1, 2, 3]})
right = pd.DataFrame({'key': ['foo', 'bar', 'roo'], 'rval': [3, 4, 5]})
print(left, '\n')
print(right, '\n')
print(pd.merge(left, right, on='key'))
>>>
   key  lval
0  foo     1
1  bar     2
2  loo     3 
   key  rval
0  foo     3
1  bar     4
2  roo     5 
   key  lval  rval
0  foo     1     3
1  bar     2     4

内连接(innert),取键的交集

print(pd.merge(left, right, how='inner'))
>>>
   key  lval  rval
0  foo     1     3
1  bar     2     4

还有左连接、右连接和外连接,你可以自己尝试下,看看有什么区别。

分组

所谓的分组,就是根据一些标准,将数据分解成一些组,将函数独立的应用到每个组上,最后将结果组合成数据结构。

df = pd.DataFrame({'A': ['foo', 'bar', 'bar', 'foo', 'foo', 'foo'],
'B': ['one', 'two', 'three', 'one', 'two', 'two'],
'C':[1, 2, 3, 4, 5, 6]})
print(df, '\n')
print(df.groupby('A').sum(), '\n')
print(df.groupby('B').sum())
>>>
     A      B  C
0  foo    one  1
1  bar    two  2
2  bar  three  3
3  foo    one  4
4  foo    two  5
5  foo    two  6       C
A      
bar   5
foo  16         C
B        
one     5
three   3
two    13

也可以按照多列分组

print(df.groupby(['A', 'B']).sum())
>>>
            C
A   B        
bar three   3
    two     2
foo one     5
    two    11

绘制简单图表

Pandas 同样提供绘制图表的功能

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2018', periods=1000))
print(ts, '\n')
ts = ts.cumsum()  # 返回累计值
ts.plot()
>>>
2018-01-01    1.055229
2018-01-02    0.101467
2018-01-03   -2.083537
2018-01-04    1.178102
2018-01-05   -0.084247
                ...   
2020-09-22   -4.316770
2020-09-23   -0.823494
2020-09-24    0.215199
2020-09-25    1.094516
2020-09-26    0.285788
Freq: D, Length: 1000, dtype: float64 Out[94]:
<matplotlib.axes._subplots.AxesSubplot at 0x4742270>

图片

 

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: PandasPython编程语言的一个开源数据分析和数据处理库。它提供了丰富的数据结构和功能,使得数据分析任务更加简单和高效。而Xmind是一种思维导图工具,可以帮助用户组织和展示复杂概念和信息。 Pandas库结合了NumPy的功能和扩展了更高级的数据结构,最重要的是它的数据结构--Dataframe。Dataframe是一个二维的表格型数据结构,类似于数据库表或Excel中的表格。它提供了各种方法来处理和操纵这些表格数据,包括数据的索引、选择、过滤、排序、分组等。 使用Pandas库可以读取和写入多种数据格式,如CSV、Excel、SQL数据库等。通过Pandas的数据结构,用户可以进行数据清洗和转换,处理缺失数据、重复数据、异常数据等。此外,Pandas还提供了强大的时间序列处理功能,可以进行时间索引、频率转换、滞后、移动窗口等操作。 在数据分析方面,Pandas提供了各种统计计算的方法,如平均值、标准差、协方差、相关系数等。同时,Pandas库还能够进行数据可视化,通过绘图的方式展示数据的分布、趋势和关联关系。这使得数据分析师可以更加直观地理解和解释数据。 Xmind是一种用于创建思维导图的工具,它可以将复杂的概念和信息以图形化的方式展示出来。思维导图可以帮助用户整理和梳理思路,帮助用户更好地理解和记忆知识。在使用Pandas进行数据分析时,可以使用Xmind来记录和整理自己的数据分析过程,包括数据处理的步骤、分析的结果和相关的观察或发现。这样可以帮助用户更好地管理和沟通数据分析的过程和结果。 总结来说,Pandas是一个功能强大的数据分析和处理库,通过其丰富的数据结构和方法,可以简化和高效完成各种数据分析任务。而Xmind则是一种思维导图工具,能够帮助用户整理和展示复杂概念和信息,方便用户将数据分析过程和结果进行可视化和整理。使用Pandas和Xmind可以让数据分析任务更加简单和直观。 ### 回答2: Pandas是一个开源的Python数据分析库,它提供了丰富的数据结构和数据分析工具,使得数据处理更加简单、高效。而Pandas库中的核心数据结构是DataFrame,可以理解为一个二维的表格数据,类似于Excel中的数据表。Xmind是一款思维导图软件,可以帮助我们更好地组织和展示思维。 Pandas可以通过Xmind来进行详解,主要包括以下几个方面: 1. DataFrame的创建和基本操作:可以通过读取文件、字典、Numpy数组等方式来创建DataFrame,然后可以进行数据的选取、切片、筛选等操作。 2. 数据的清洗和处理:Pandas提供了强大的数据清洗和处理功能,可以用来处理缺失数据、重复数据以及异常值。也可以进行数据的合并、拆分、排序等操作,以及字符串、时间序列、数值等类型的转换。 3. 数据的分组和聚合:Pandas的分组和聚合功能非常强大,可以进行按列或者按行的分组操作,然后对每一组数据进行一些聚合操作,如求和、计数、平均值等。这样可以更好地了解数据的分布和概况。 4. 数据的可视化:Pandas可以配合Matplotlib等数据可视化工具,对数据进行绘图和可视化操作。可以绘制线图、柱状图、饼图等各种图表,更直观地展示数据的特征和趋势。 综上所述,使用Pandas库可以更方便地进行数据分析和处理,而通过Xmind来详细说明Pandas的各种功能和操作,能够更好地帮助用户理解和应用这些功能,从而更高效地进行数据分析和处理。 ### 回答3: Pandas是一个Python库,专门用于数据分析和数据操作。它提供了高效的数据结构和数据分析工具,使得使用Python进行数据处理变得更加方便和快速。而Xmind是一款脑图软件,用于整理和组织复杂的思维结构。 Pandas提供的数据结构主要包括两种:Series和DataFrame。Series是一维的带有标签的数组,类似于传统的数组或列表。每个元素都有唯一的标签,可以通过标签进行索引取值,方便进行数据查找和操作。DataFrame则是二维的表格型数据结构,类似于关系型数据库中的表。它由多个Series组成,每个Series代表一列数据。DataFrame可以进行行列索引、数据选择和过滤,方便进行数据的清洗和分析。 Pandas提供了丰富的数据操作和分析工具。可以进行数据的读取、清洗、转换和处理。可以对数据进行切片、聚合、排序和合并等操作。还可以对数据进行统计分析、绘图和可视化。Pandas还支持对缺失数据的处理,能够灵活处理数据中的空值,并进行填充或删除操作。 Xmind是一款强大的思维导图软件,可以帮助用户将复杂的信息整理、组织和展示。用户可以使用Xmind创建思维导图来表示数据结构、函数关系、工作流程等。通过将Python中的Pandas库和Xmind结合使用,可以更好地理解和展示数据分析的过程。可以使用脑图绘制数据处理流程图,方便团队内部的交流和理解。同时,可以使用脑图来整理数据分析中的关键知识点和技巧,方便进行知识传递和分享。 综上所述,PythonPandas库提供了便捷的数据处理和分析工具,而Xmind则可以辅助整理和展示数据分析的过程和结果。两者结合使用,可以帮助用户更好地进行数据分析和可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

缓下脚步

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

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

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

打赏作者

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

抵扣说明:

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

余额充值