龙空技术网

Python中pandas数据分析实战(数据创建、清洗)

慢慢品慢慢觉 145

前言:

如今姐妹们对“pandas创建excel”可能比较讲究,我们都想要学习一些“pandas创建excel”的相关资讯。那么小编同时在网上搜集了一些关于“pandas创建excel””的相关知识,希望各位老铁们能喜欢,姐妹们一起来学习一下吧!

最近在学习pandas数据分析与实战,将笔记整理如下:

学习目标:

熟练掌握pandas一维数组Series结构熟练掌握pandas二维数组DataFrame结构和创建方法熟练掌握pandas读取Excel文件的方法掌握数据清洗的一般方法一、pandas简介

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

二、pandas常用数据类型

1.Series:一维数组,与Numpy中的一维array类似。与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

2.DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。

三、Series

Series是pandas提供的一维数组,由索引和值组成,是一个类似字典的结构。

1.创建

import pandas as pdimport numpy as nps1 = pd.Series(range(1,10,2))s2 = pd.Series({'语文':98,'数学':88,'英语':68})print(s1,'\n',s2)********************0    11    32    53    74    9dtype: int64 语文    98数学    88英语    68dtype: int64********************
修改

由于我们没有为数据指定索引,系统会自动创建整数型索引。我们也可以修改器对应的值

s1[2]=-15        #   2  为索引s2['语文']=60    #‘语文’为索引
四则运算

两等长的Series对象可以进行四则运算

s1 = pd.Series(range(1,10,2))s2 = pd.Series(range(11,20,2))print(s1*s2)print(s1+s2)
其他
s1 = pd.Series(range(1,10,2))s2 = pd.Series(range(11,20,2))print(s1.std())#标准差print(s2.var())#无偏方差print(s2.sem())#无偏标准差******************************83.162277660168379510.01.4142135623730951*******************************
四、二维数组DataFrame

二维数组DataFrame是pandas最常用的数据结构之一,每个DataFrame对象可以看做一个二维表格,由索引,列名和值组成。

创建

import pandas as pdimport numpy as np#方法一:直接使用pd.DataFrame(dict)test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}#[1].直接写入参数test_dicttest_dict_df = pd.DataFrame(test_dict)print(test_dict_df)#方法二:使用from_dict方法:test_dict_df = pd.DataFrame.from_dict(test_dict)print(test_dict_df)#其他方法:test_dict_df = pd.DataFrame({'id':1,'name':'Alice'},pd.Index(range(1)))#必须有索引,不然会报错print(test_dict_df)***************************     id    name  math  english0   1   Alice    90       891   2     Bob    89       942   3   Cindy    99       803   4    Eric    78       944   5   Helen    97       945   6  Grace     93       90   id    name  math  english0   1   Alice    90       891   2     Bob    89       942   3   Cindy    99       803   4    Eric    78       944   5   Helen    97       945   6  Grace     93       90   id   name0   1  Alice**************************   #csv文件构建DataFrame(csv to DataFrame)df = pd.read_csv('./xxx.csv')在此不做演示,但这是最常见的创建方法。

2.基本属性详解

DataFrame() 创建一个DataFrame对象df.values 返回ndarray类型的对象df.index 获取行索引df.columns 获取列索引df.axes 获取行及列索引df.T 行与列对调df. info() 打印DataFrame对象的信息df.head(i) 显示前 i 行数据df.tail(i) 显示后 i 行数据df.describe() 查看数据按列的统计信息

import pandas as pdimport numpy as np#方法一:直接使用pd.DataFrame(dict)test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}df = pd.DataFrame.from_dict(test_dict)print(type(df))print(df.index)print(df.axes)print(df.info())print(df.head(3))print(df.describe())*****************************  <class 'pandas.core.frame.DataFrame'>RangeIndex(start=0, stop=6, step=1)[RangeIndex(start=0, stop=6, step=1), Index(['id', 'name', 'math', 'english'], dtype='object')]<class 'pandas.core.frame.DataFrame'>RangeIndex: 6 entries, 0 to 5Data columns (total 4 columns): #   Column   Non-Null Count  Dtype ---  ------   --------------  -----  0   id       6 non-null      int64  1   name     6 non-null      object 2   math     6 non-null      int64  3   english  6 non-null      int64 dtypes: int64(3), object(1)memory usage: 232.0+ bytesNone   id   name  math  english0   1  Alice    90       891   2    Bob    89       942   3  Cindy    99       80             id       math    englishcount  6.000000   6.000000   6.000000mean   3.500000  91.000000  90.166667std    1.870829   7.456541   5.455884min    1.000000  78.000000  80.00000025%    2.250000  89.250000  89.25000050%    3.500000  91.500000  92.00000075%    4.750000  96.000000  94.000000max    6.000000  99.000000  94.000000  ***************************
读取Excel数据

首先读取Excel数据,这是股票600848的相关数据

import pandas as pdimport numpy as npdata = pd.read_excel('123.xlsx')print(data.head())*******************************************************************************   Unnamed: 0   open   high  close  ...    ma20     v_ma5    v_ma10    v_ma200           0  20.30  20.36  20.06  ...  19.651  62960.24  48018.50  41014.831           1  20.56  20.63  20.30  ...  19.627  66150.84  46870.52  40126.272           2  20.53  20.75  20.58  ...  19.589  60587.04  45194.13  39259.613           3  20.16  20.86  20.53  ...  19.548  55213.95  45272.38  38075.034           4  19.68  20.20  20.15  ...  19.499  43079.42  40935.92  35326.21*******************************************************************************  print(data.describe())#对数据的描述,可以看到数量、均值、标准差、最小值最大值等。  *****************************************************************************         Unnamed: 0        open  ...         v_ma10         v_ma20count  529.000000  529.000000  ...     529.000000     529.000000mean   264.000000   24.866257  ...   86313.793478   87102.811739std    152.853416    4.526294  ...   47366.982087   43074.704645min      0.000000   14.760000  ...   24382.830000   33322.16000025%    132.000000   21.490000  ...   50209.070000   54786.68000050%    264.000000   24.100000  ...   69278.660000   72357.67000075%    396.000000   27.200000  ...  109875.700000  109350.020000max    528.000000   37.800000  ...  248163.310000  220245.340000[8 rows x 14 columns]*********************************************************************************  

我们也可以通过可视化的方式对上述数据进行可视化分析。再次不做介绍,后面我还会写一期数据可视化的。

数据清洗

方法一:直接删除

一是查看行或列是否有空格(以下的df为DataFrame类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值)

• isnull方法

• 查看行:df.isnull().any(axis=1)

• 查看列:df.isnull().any(axis=0)

• notnull方法:

• 查看行:df.notnull().all(axis=1)

• 查看列:df.notnull().all(axis=0)

例子:

• df.isnull().any(axis=1) # 检测行内是否有空值

注意点:以上方法都可以用~取反的办法获取相反的结果

二是在上面的前提下使用df.loc[],可取出上面方法中筛选出数据的具体数据如:

• df.loc[df.isnull().any(axis=1)]

• 取出这几行的索引可用属性index如:df.loc[df.isnull().any(axis=1)].index

• 得到这些索引后可以使用drop方法进行删除如:

• 注意:drop方法中的axis值与其他方法相反,axis=0表示行,=1表示列。

• df.drop(labels=drop_index, axis=0)

​总结下来为4步:

一.使用isnull或notnull筛选:df.isnull().any(axis=0)

二.使用loc取出具体数据:df.loc[df.isnull().any(axis=1)]

三:取出这些数据的索引:df.loc[df.isnull().any(axis=1)].index

四.使用drop删除:df.drop(labels=drop_index, axis=0)

方法二:填充空值

步骤和方法一前几步相同

isnull()

notnull()

dropna(): 过滤丢失数据(df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列)

fillna(): 填充丢失数据(可以选择自主添加数据,或者用表中原有的数据进行补充)

1.使用dropna(不常用):df.dropna(axis=0)

2.使用fillna(常用):

一.df.fillna(value=666)给所有的控制赋值为666

二.df.fillna(method='ffill', axis=0) # axis=0表示在垂直方向填充(axis值:0为垂直,1为水平),使用上方的值对空值进行填充,组合起来就是,使用垂直方向上方的值对当前位置的值进行填充

三.df.fillna(method='bfill', axis=1) # axis=1表示在水平方向填充(axis值为0垂直1为水平),bfill表示使用后面的值对空值进行填充,组合起来就是,使用水平方向右边的值对当前位置的值进行填充

总结:ffill(前)和bfill(后)决定前或后,axis决定垂直或水平

标签: #pandas创建excel