pandas 库是基于numpy库 的软件库,因此安装Pandas 之前需要先安装numpy库。默认的pandas不能直接读写excel文件,需要安装读、写库即xlrd、xlwt才可以实现xls后缀的excel文件的读写,要想正常读写xlsx后缀的excel文件,还需要安装openpyxl库 。

pandas详解

转载自:https://blog.csdn.net/weixin_46277553/article/details/123922187?spm=1001.2014.3001.5502

Pandas 这个名字来源于面板数据(Panel Data)与数据分析(data analysis)这两个名词的组合。Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。

numpy能够帮我们处理处理数值型数据,但是这还不够。
很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等
比如:我们通过爬虫获取到了存储在数据库中的数据等等。
因此,numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据。

(二)pandas的常用数据类型

  1. import pandas as pd
  2. a = pd.Series([1,5,4,85,87,512])
  3. print(a,type(a))

 从上述结果中我们可以看到Series创建的对象带有索引。

pd.Series([],index=list(string))

  1. b = pd.Series([1,5,4,2,45,45,24,5],index=list('abcdefgh'))
  2. print(b)

通过字典也可以创建Series对象,此时字典的键为索引。

  1. import pandas as pd
  2. dic = {
  3. 'name':'苏凉.py',
  4. 'age':'22',
  5. 'qq_num':'787991021',
  6. }
  7. information = pd.Series(dic)
  8. print(information)

Series对象本质上由两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键->值

  1. import pandas as pd
  2. dic = {
  3. 'name':'苏凉.py',
  4. 'age':'22',
  5. 'qq_num':'787991021',
  6. }
  7. information = pd.Series(dic)
  8. print(information)
  9. print('-'*100)
  10. print(information[0])

  1. print(information[[0,2,3]])

  1. print(information[0:3])

  1. print(information[['name','age','wechat']])

对于一个陌生的Series类型,我们可以通过index和values来了解它的索引和值。

  1. print(information.index)

  1. a = information.index
  2. for i in a:
  3. print(i)

  1. print(information.values)

  1. import pandas as pd
  2. import numpy as np
  3. a = pd.DataFrame(np.arange(1,13).reshape(3,4))
  4. print(a)

 这里可以看到用DataFrame创建数组时存在行索引和列索引。
行索引:表明不同行,横向索引,叫index,0轴,axis=0.
列索引:表明不同列,纵向索引,叫columns,1轴,axis=1.

pd.DataFrame([]),index=list(),columns=list()

  1. a = pd.DataFrame(np.arange(1,13).reshape(3,4),index=list('123'),columns=list('ABCD'))
  1. import pandas as pd
  2. list = {
  3. 'name':['苏凉.py','佚名'],
  4. 'age':['22','15'],
  5. 'QQ_num':['787991021','01234567'],
  6. 'wechat':['lxzy787991021','ym789456']
  7. }
  8. person = pd.DataFrame(list)
  9. print(person)

  1. import pandas as pd
  2. list2 = [
  3. {'name':'苏凉.py','age':'22','QQ_num':'787991021','wechat':'lxzy787991021'},
  4. {'name':'佚名','QQ_num':'01234567','wechat':'ym789456'}
  5. ]
  6. person = pd.DataFrame(list2)
  7. print(person)

 这里可以看到当我们对应的位置没有输入值时结果NaN

注:在dataframe中进行取行或者取列操作时,[]中为数字则取行,[]中为字符串则取列!!

  1. print(person[:2])

  1. print(person['name'])

  1. print(person[['name','wechat']])

loc时通过标签索引来获取值

  1. print(person.loc[1,:])

  1. print(person.loc[[0,1]])

  1. print(person.loc[:,'name'])

  1. print(person.loc[:,['name','wechat']])

iloc是通过位置来获取值
下面列举四个例子即可:

  1. print(person.iloc[0,])

  1. print(person.iloc[:,2])

  1. print(person.iloc[0,3])

  1. print(person.iloc[[0,1],[0,2,3]])

 **************************************************************************************************************************

简单操作excel:

(一)创建文件

  1. import pandas as pd
  2. df = pd.DataFrame()
  3. df.to_excel('D:/Temp01/test.xlsx')
  4. print('创建成功!!')

只需将我们定义的数据传入Dataframe内即可:

  1. import pandas as pd
  2. numb_list = {
  3. 'ID':[1,2,3,4],
  4. 'name':['苏凉','jake','佚名','Tom'],
  5. 'age':[22,18,25,16],
  6. 'QQ_num':[787991021,2544722208,12545654,58456]
  7. }
  8. df = pd.DataFrame(numb_list)
  9. df.to_excel('D:/Temp01/test.xlsx')
  10. print('创建成功!!')

利用set_index设置索引

  1. df = df.set_index('ID')

 (二)读取文件

pd.read_excel()常用参数说明:

首先,认识一下pd.read_excel(),函数的官方文档是这么说的:将Excel文件读取到pandas DataFrame中,系统默认支持‘xls’和‘xlsx’后缀的文件名,函数都可以处理,看一下这个函数的所有参数:

io参数

这个参数可以接受的有:字符串str,excel文件,或者路径对象,一般是路径+文件的名字,这是最重要的参数,必须传入:
pd.read_excel(r’F:\data\aa.xlsx’)

sheet_name

这个参数是指定excel表格的第几个sheet表,不指定默认是第一个sheet,对应的值是0,如果需要打开第二个sheet,可以将sheet_name=1,如果你的sheet自定义了名字,则把数字换成你名字即可;

header
这个参数是为了解决是否将前面的表头读入数据表中,如果header = 2,则说明指定位置是2的行作为列名,如果没有设置则说明是所有的数据作为数据,然后另外一行(系统默认输入0-n)作为列名字。
index_col
这个参数是默认是None,和header一样,可以填入数字,意思是设置第几列为行索引。
dtype
这个参数输入可以表示类型的名称字符或者字典,如果dtype=‘str’,则说明整个表格的书数据都转换成字符串的数据类型,如果输入的是字典,则dtype={‘列1’:‘str’,‘列2’:‘int’}则说明每个字段都可以指定不同的数据类型,上面的定义的意思就是第一列是字符串,第二列是整型。

  1. people = pd.read_excel('./People.xlsx') #导入excel表格
  1. print(people.shape) #查看有多少行多少列
  1. x = people.columns
  2. for i in x:
  3. print(i)

 遇到上述两种情况在读取列名时,pandas默认第一行为列名,当第一行为空时则需要设置header=某行

  1. import pandas as pd
  2. people = pd.read_excel('./People.xlsx',header = 1)
  3. print(people.columns)

当打开的文件没有列名时,我们需要设置列名。

  1. import pandas as pd
  2. people = pd.read_excel('./People.xlsx',header=None)
  3. # 自定义列名
  4. people.columns=['ID','Type','Title','FirstName','MiddleName','LastName']
  5. people.set_index('ID',inplace=True)
  6. print(people.columns)
  7. # 保存
  8. people.to_excel('./test.xlsx')
  9. print('save success')

在上面我们创建了一个test文件。当我们再次打开时,pandas会给我们重新创建一个索引,如下图:

 这时我们需要指定索引

  1. import pandas as pd
  2. people = pd.read_excel('./test.xlsx',index_col="ID")
  3. people.to_excel('./test1.xlsx')
  4. print('save success')

  1. import pandas as pd
  2. d1 = pd.Series([10,20,30],index=[1,2,3],name='a')
  3. d2 = pd.Series([40,50,60],index=[1,2,3],name='b')
  4. d3 = pd.Series([100,200,300],index=[2,3,4],name='c')
  5. df = pd.DataFrame({d1.name:d1,d2.name:d2,d3.name:d3})
  6. df2 = pd.DataFrame([d1,d2,d3])
  7. print(df)
  8. print('*'*100)
  9. print(df2)

 从上述结果可以看出通过Series创建的值传到Dataframe时需要用字典的形式,否则索引会自动转换为列。

(三)Pandas如何追加写入Excel

想要实现Excel的追加的主要思路为:将原有的数据先读出来,然后与需要存入的数据一并添加即可。

先创建一个excel文件:

  1. import pandas as pd
  2. data = {'city': ['北京', '上海', '广州', '深圳'],
  3. '2018': [33105, 36011, 22859, 24221]}
  4. data = pd.DataFrame(data)
  5. data.to_excel('excel追加.xlsx', index=False)

  1. import pandas as pd
  2. # 先将Excel中原有的数据读取出来
  3. original_data = pd.read_excel('excel追加.xlsx')
  4. data2 = {'city': ['北京', '上海', '广州', '深圳'],
  5. '2018': ['a', 'b', 'c', 'd']}
  6. data2 = pd.DataFrame(data2)
  7. # 将新数据与旧数据合并起来
  8. save_data = original_data.append(data2)
  9. save_data.to_excel('excel追加.xlsx', index=False)

  1. import pandas as pd
  2. # 先将Excel中原有的数据读取出来
  3. original_data = pd.read_excel('excel追加.xlsx')
  4. data2 = {'city': ['北京', '上海', '广州', '深圳'],
  5. '2018': ['a', 'b', 'c', 'd']}
  6. data2 = pd.DataFrame(data2)
  7. # 将新数据与旧数据合并起来
  8. save_data = pd.concat([original_data, data2], axis=0)
  9. save_data.to_excel('excel追加.xlsx', index=False)

使用ExcelWriter()类将数据导出至多个excel页签

在pandas中我们通常使用to_excel()方法将dataframe导出至Excel文件上,如果需要将多个不同的dataframe导出到同一个Excel文件的不同Sheet页,可以使用pandas.ExcelWriter()类来实现。

ExcelWriter(path, engine=None, date_format=None, datetime_format=None,mode=‘w’)

path:xls或xlsx文件的路径;
engine:可选参数,默认值为”xlwt”,对于xls文件该参数值为”xlwt”有效,对于xlsx文件该参数值为”openpyxl”有效;
date_format:格式字符串,用于写入Excel文件的日期(例如“ YYYY-MM-DD”);
datetime_format:写入Excel文件的日期时间对象的格式字符串。 (例如“ YYYY-MM-DD HH:MM:SS”)
mode:可选参数,{‘w’, ‘a’}, 默认为 ‘w’,即擦除目标文件原内容,将dataframe覆盖式导出至目标Excel文件。当为’a’时,将dataframe追加导入至目标Excel文件,目标文件中原内容保留。此处需注意,如果为’a’,且导出的为xlsx文件,需将该参数修改为”openpyxl”。

  1. import pandas as pd
  2. import numpy as np
  3. test=pd.DataFrame(np.arange(0,100).reshape([25,4]))
  4. test1=pd.DataFrame(np.arange(100,200).reshape([25,4]))
  5. writer = pd.ExcelWriter(r"C:\Users\user_name\Desktop\test.xlsx",engine="openpyxl",mode="a")#追加式导出,不覆目标文件盖原有内容
  6. test.to_excel(writer,"test",index=False)#test导出至名为testSheet页上
  7. test1.to_excel(writer,"test1",index=False)#test1导出至名为test1Sheet页上
  8. writer.save()

小试牛刀

  1. import pandas as pd
  2. import os
  3. def save_excel(path,datamy):
  4. data = {'编号': ['例如:xx1'],
  5. '名字': ["例如:dog"],
  6. '重复名字': ["例如:small"],
  7. '年纪': ["例如:300"],
  8. '岁数': ["例如:5000"]}
  9. if os.path.exists(path)==False:
  10. data1 = pd.DataFrame(data)
  11. data1.to_excel(path, index=False)
  12. print("新建表格成功!")
  13. # sheet_name默认为0,即读取第一个sheet的数据
  14. original_data = pd.read_excel(path, sheet_name=0,engine='openpyxl')
  15. # print(original_data.columns)#打印列名
  16. if len(data)!=len(datamy):
  17. print("数据格式不太对")
  18. else:
  19. for i in range(len(data)):
  20. data.update({list(data.keys())[i]:[datamy[i]]})
  21. data = pd.DataFrame(data)
  22. save_data = original_data.append(data)
  23. save_data.to_excel(path, index=False)
  24. print("Done!")
  25. if __name__=="__main__":
  26. # 每次都需要修改的路径
  27. path = "测试.xlsx"
  28. datamy=["xx2","2499","0.2","300","2.5k"]
  29. save_excel(path,datamy)

 

版权声明:本文为菜芽caiya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/caiya/p/16683639.html