python数据分析知识点_快速介绍Python数据分析库pandas的基础知识和代码示例

0824ab18972bd407a2bc3a10110b9a560eb30969.jpeg?token=ce4c4a2a0822694d007b11c1bb42c009

“软件工程师阅读教科书作为参考时不会记住所有的东西,但是要知道如何快速查找重要的知识点。”

为了能够快速查找和使用功能,使我们在进行机器学习模型时能够达到一定流程化。我创建了这个pandas函数的备忘单。这不是一个全面的列表,但包含了我在构建机器学习模型中最常用的函数。让我们开始吧!

本附注的结构:

导入数据导出数据创建测试对象查看/检查数据选择查询数据清理筛选、排序和分组统计数据首先,我们需要导入pandas开始:

import pandas as pd

导入数据

使用函数pd.read_csv直接将CSV转换为数据格式。

注意:还有另一个类似的函数pd。read_excel用于excel文件。

# Load data df = pd.read_csv('filename.csv') # From a CSV filedf = pd.read_excel('filename.xlsx') # From an Excel file

导出数据

tocsv()将数据存储到本地的文件。我们可以通过df[:10].tocsv()保存前10行。我们还可以使用df.to_excel()保存和写入一个DataFrame到Excel文件或Excel文件中的一个特定表格。

df.to_csv('filename.csv') # Write to a CSV filedf.to_excel('filename.xlsx') # Write to an Excel file

创建测试对象

从输入的数据建立一个DataFrame

# Build data frame from inputted datadf = pd.DataFrame(data = {'Name': ['Bob', 'Sally', 'Scott', 'Katie'],'Physics': [68, 74, 77, 78], 'Chemistry': [84, 100, 73, 90], 'Algebra': [78, 88, 82, 87]})

83025aafa40f4bfbc446ffb058cd7cf7f53618cc.jpeg?token=7c0c5e615d677e939063bfae94101be4

或者从列表中创建一个series

# Create a series from an iterable my_listmy_list = [['Bob',78],['Sally',91], ['Scott',62], ['Katie',78], ['John',100]]df1 = pd.Series(my_list) # Create a series from an iterable my_list

8694a4c27d1ed21b7d9c1825f4ecd9c350da3f25.jpeg?token=51aefbd3cdd31aae7541243849838d78

查看/检查数据

head():显示DataFrame中的前n条记录。我经常把一个数据档案的最上面的记录打印在我的jupyter notebook上,这样当我忘记里面的内容时,我可以回头查阅。

df.head(3) # First 3 rows of the DataFrame

ae51f3deb48f8c542d848c0f60ab29f2e1fe7fc0.jpeg?token=711e3368374b85fc1ac33b4228241603

tail():返回最后n行。这对于快速验证数据非常有用,特别是在排序或附加行之后。

df.tail(3) # Last 3 rows of the DataFrame

adaf2edda3cc7cd903de8d7d62832538b90e9128.jpeg?token=347272dc2b8275b42d69e048313a772f

添加或插入行

要向DataFrame追加或添加一行,我们将新行创建为Series并使用append()方法。

在本例中,将新行初始化为python字典,并使用append()方法将该行追加到DataFrame。

在向append()添加python字典类型时,请确保传递ignore_index=True,以便索引值不会被使用。生成的轴将被标记为编号series0,1,…, n-1,当连接的数据使用自动索引信息时,这很有用。

append() 方法的作用是:返回包含新添加行的DataFrame。

#Append row to the dataframe, missing data (np.nan)new_row = {'Name':'Max', 'Physics':67, 'Chemistry':92, 'Algebra':np.nan}df = df.append(new_row, ignore_index=True)

71cf3bc79f3df8dc69fc14959593768c4610287e.jpeg?token=273634642ce39e79ed49af909c69a6cb

向DataFrame添加多行

# List of series list_of_series = [pd.Series(['Liz', 83, 77, np.nan], index=df.columns),pd.Series(['Sam', np.nan, 94,70], index=df.columns ), pd.Series(['Mike', 79,87,90], index=df.columns), pd.Series(['Scott', np.nan,87,np.nan], index=df.columns),]# Pass a list of series to the append() to add multiple rowsdf = df.append(list_of_series , ignore_index=True)

d4628535e5dde711df4aaadafd6dca1c9c16618f.jpeg?token=c50f25c3a92d34e94e44843444f7ce08

我们也可以添加新的列

# Adding a new column to existing DataFrame in Pandassex = ['Male','Female','Male','Female','Male','Female','Female','Male','Male']df['Sex'] = sex

060828381f30e924b4ce1a77148a6a011c95f793.jpeg?token=e259d4f775caf6dfd55eec59c41ca67d

info()函数用于按列获取标题、值的数量和数据类型等一般信息。一个类似但不太有用的函数是df.dtypes只给出列数据类型。

df.info() #Index, Datatype and Memory information

b58f8c5494eef01f0b2729b4bc7c9d22bc317d1c.jpeg?token=b75ae52cb7b7377b1adc9e0ba3200507

# Check data type in pandas dataframedf['Chemistry'].dtypes >>> dtype('int64')# Convert Integers to Floats in Pandas DataFramedf['Chemistry'] = df['Chemistry'].astype(float) df['Chemistry'].dtypes>>> dtype('float64')# Number of rows and columnsdf.shape >>> (9, 5)

value_counts()函数的作用是:获取一系列包含唯一值的计数。

# View unique values and counts of Physics columndf['Physics'].value_counts(dropna=False)

9922720e0cf3d7ca32a093e8a99dba0e6a63a967.jpeg?token=1c3c25cc6a9b138b740703cde47518ae

选择

在训练机器学习模型时,我们需要将列中的值放入X和y变量中。

df['Chemistry'] # Returns column with label 'Chemistry' as Series

5bafa40f4bfbfbedcd242dd32372f331aec31fa1.jpeg?token=3e5e245621214e167b20a6af07c7d0f0

df[['Name','Algebra']] # Returns columns as a new DataFrame

908fa0ec08fa513d022ef61667ef51fcb0fbd9ff.jpeg?token=1da84b5b4722db47ff2e37b2f85d3d14

df.iloc[0] # Selection by position

b8014a90f603738da261a338ee99b456f819ec0e.jpeg?token=f0bef08c069c7870c86bc1af66faa0c5

df.iloc[:,1] # Second column 'Name' of data frame

377adab44aed2e7382c919c9de83a58c86d6fab8.jpeg?token=317d433462d231424af4a34fef4c5b49

df.iloc[0,1] # First element of Second column>>> 68.0

数据清理

rename()函数在需要重命名某些选定列时非常有用,因为我们只需要指定要重命名的列的信息。

# Rename columnsdf = df.rename({'Name':'Student','Algebra':'Math'}, axis='columns')

aa64034f78f0f7365041e3bf50d7b71eeac4135e.jpeg?token=223402fc392169bc5c0e62956394bd7b

在DataFrame中,有时许多数据集只是带着缺失的数据的,或者因为它存在而没有被收集,或者它从未存在过。

NaN(非数字的首字母缩写)是一个特殊的浮点值,所有使用标准IEEE浮点表示的系统都可以识别它

pandas将NaN看作是可互换的,用于指示缺失值或空值。有几个有用的函数用于检测、删除和替换panda DataFrame中的空值。

# Checks for null Values, Returns Boolean Arrraycheck_for_nan = df.isnull()

b8389b504fc2d5629278ea90bb9394e877c66ce7.jpeg?token=ee74058dd837c2de783004f3ecb213ce

要检查panda DataFrame中的空值,我们使用isnull()或notnull()方法。方法返回布尔值的数据名,对于NaN值为真。在相反的位置,notnull()方法返回布尔值的数据,对于NaN值是假的。

value = df.notnull() # Opposite of df2.isnull()

562c11dfa9ec8a1307420a8ead819588a1ecc089.jpeg?token=0d6b278ee6e89ba511794f9cabaaa886

我们使用dropna()函数删除所有缺少值的行。

drop_null_row = df.dropna() # Drop all rows that contain null values

55e736d12f2eb9385d4e11528ee08132e4dd6ffc.jpeg?token=534fef815de062f2ee27068f30589a17

有时,我们可能只是想删除缺失值的列。

# Drop all columns that contain null valuesdrop_null_col = df.dropna(axis=1)

08f790529822720ef87f3b9f20490e41f31faba8.jpeg?token=282c03acbb6630fb38751bb223eb72ac

我们可以使用fillna()来填充缺失的值。例如,我们可能想用0替换' NaN '。

replace_null = df.fillna(0) # Replace all null values with 0

b3119313b07eca80afbb3385cba193daa044839b.jpeg?token=7d0bc57091e358294b6249657602c33e

或者用平均值替换NaN。

# Replace all null values with the mean (mean can be replaced with almost any function from the statistics module)df = round(df.fillna(df.mean()),2)

279759ee3d6d55fb05e95c4536a04b4d20a4dd2b.jpeg?token=1769dc1055f41501cd0d584f1b80cf56

方法可用于替换DataFrame中的值

one = df.replace(100,'A') # Replace all values equal to 1 with 'one'

4d086e061d950a7b80633a08505366def3d3c935.jpeg?token=b9f2e35d7f77e7014b76ef719d5527cf

筛选、排序和分组

找到看到物理成绩达到80或80以上的学生

fil_80 = df[df['Physics'] > 80]

54fbb2fb43166d2221ab4e341ea10df09152d23f.jpeg?token=cd2a6538edbbd3488881bf38095862fb

学生在化学考试中得到80分或更高的分数,数学考试中却不到90分

fil = df[(df['Chemistry'] > 80) & (df['Math'] < 90)]

b151f8198618367a8ff713f675f18fd3b31ce52c.jpeg?token=a83aa3a5e94983ebb19e12f7ff9f7a9d

sort_values ()可以以特定的方式对pandas数据进行排序。通常回根据一个或多个列的值对panda DataFrame进行排序,或者根据panda DataFrame的行索引值或行名称进行排序。

例如,我们希望按学生的名字按升序排序。

ascending = df.sort_values('Student')

d439b6003af33a873bb21b9d9fde143f5143b5e7.jpeg?token=7731e8caa8d7f208cb3157f20f9892be

化学分数按降序排列

descending = df.sort_values('Chemistry',ascending=False)

a686c9177f3e6709e5d3415a67459b3afadc55c8.jpeg?token=c7d3e798248266f3b9aa5522e35a6617

更复杂一点的,我们希望按物理分数的升序排序,然后按化学分数的降序排序。

df.sort_values(['Physics','Chemistry'],ascending=[True,False])

6159252dd42a283418b3cb7c0037cded15cebf3d.jpeg?token=50cfecf7849569e443b6cfa86109a0b8

groupby 是一个非常简单的概念。我们可以创建一组类别,并对类别应用一个函数。这是一个简单的概念,但却是我们经常使用的极有价值的技术。Groupby的概念很重要,因为它能够有效地聚合数据,无论是在性能上还是在代码数量上都非常出色。

通过性别进行分组

group_by = df.groupby(['Sex']) # Returns a groupby object for values from one columngroup_by.first() # Print the first value in each group

8d5494eef01f3a29e556901ac3a7b8365e607cd5.jpeg?token=55495b19698bfde087d749871778ff28

计算性别分组的所有列的平均值

average = df.groupby(‘Sex’).agg(np.mean)

7acb0a46f21fbe09f141b8c132e208348644ad55.jpeg?token=d4eec33b5049e9c4ab88c470a86570f6

统计数据

我们可能熟悉Excel中的数据透视表,可以轻松地洞察数据。类似地,我们可以使用panda中可用的pivottable()函数创建Python pivot表。该函数与groupby()函数非常相似,但是提供了更多的定制。

假设我们想按性别将值分组,并计算物理和化学列的平均值和标准差。我们将调用pivot_table()函数并设置以下参数:

index设置为 'Sex',因为这是来自df的列,我们希望在每一行中出现一个唯一的值

values值为'Physics','Chemistry' ,因为这是我们想应用一些聚合操作的列

aggfunc设置为 'len','np.mean','np.std

pivot_table = df.pivot_table(index='Sex',values=['Physics','Chemistry'], aggfunc=[len, np.mean, np.std])

0d338744ebf81a4c7e2367e48ca8645e252da617.jpeg?token=02f41711fa33d38f17f6e70ca158a39b

注意:使用len的时候需要假设数据中没有NaN值。

description()用于查看一些基本的统计细节,如数据名称或一系列数值的百分比、平均值、标准值等。

df.describe() # Summary statistics for numerical columns

b8014a90f603738d76aefe65ef99b456f919ec1f.jpeg?token=78aa1777d601f515d5b712ef8bc07ec6

使用max()查找每一行和每列的最大值

# Get a series containing maximum value of each rowmax_row = df.max(axis=1)

cc11728b4710b912fb3af53d987ff80490452286.jpeg?token=00b5959c57cd5edeb22bcaac9337b609

# Get a series containing maximum value of each column without skipping NaNmax_col = df.max(skipna=False)

b21c8701a18b87d6abdcb2645e8a2c3f1e30fdbc.jpeg?token=7bb44416219895a703491f2a8f4feac5

类似地,我们可以使用df.min()来查找每一行或每列的最小值。

其他有用的统计功能:

sum():返回所请求的轴的值的总和。默认情况下,axis是索引(axis=0)。

mean():返回平均值

median():返回每列的中位数

std():返回数值列的标准偏差。

corr():返回数据格式中的列之间的相关性。

count():返回每列中非空值的数量。

总结

我希望这张小抄能成为你的参考指南。当我发现更多有用的Pandas函数时,我将尝试不断地对其进行更新。本文的代码

github /Nothingaholic/Python-Cheat-Sheet/blob/master/pandas.ipynb

作者:XuanKhanh Nguyen

deephub翻译组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值