前言:
如今姐妹们对“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