pandas小记(二)——DataFrame

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013700358/article/details/82120172

说起pandas,立马就会想到DataFrame,这个数据结构在操作一些如csv等文件时很方便,在处理xls文件时,我也习惯于将其转化为DataFrame来操作(如果有别的更方便的方法,也希望赐教啦~),在理解时,也可以将其理解为如excel中,由行、列组成的表格

DataFrame的创建

DataFrame可以通过如下方式创建:
pandas.DataFrame( data, index, columns, dtype, copy)
各参数的含义如下:

参数 含义
data 原始数据形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame
index 对应行标签的索引,若未给定,则默认从0开始编号
columns 对应列标签的索引值,若未给定,默认从0开始编号
dtype 列的数据类型
copy 是否用于复制,一般默认为False

data表示DataFrame支持的数据类型,以下面的代码示例,用列表创建:

>>> d1 = [['a', 1], ['b', 2], ['c', 11], ['d', 223]]
>>> df = pd.DataFrame(d1)
>>> df
   0    1
0  a    1
1  b    2
2  c   11
3  d  223

更进一步的:

>>> df = pd.DataFrame(d1, index = [11, 111, 1111, 11111], columns = ['name', 'no'], dtype = float)
>>> df
      name     no
11       a    1.0
111      b    2.0
1111     c   11.0
11111    d  223.0

这里将行和列的索引进行指定,同时将’no’列的值设为float类型,最后的结果即如上所示

DataFrame的索引

在DataFrame中,索引主要有两种方法:lociloc
怎么区分的?跟上面创建的时候一样,创建的时候index对应行,columns对应列
那么这里的ilocloc多了个i,即index,所以iloc是根据行索引,而loc是根据列索引
具体的用法可以在各自的工程中进行实践,仍旧以上面的实例为例:

>>> df.iloc[1:]
      name     no
111      b    2.0
1111     c   11.0
11111    d  223.0

>>> df.iloc[1:, 0]
111      b
1111     c
11111    d

>>> df.loc[(df['name']>'b')]
      name     no
1111     c   11.0
11111    d  223.0

上面展示了三种索引方法,第一种是最简单的iloc索引,DataFrame内部默认还是按照0、1、2的行编号,因此df.iloc[1:]的意思就是从df中取得从1开始编号的所有行
而第二种,除了行以外,后面增加的数字0对应第0列,即name列
至于第三种,则是直接根据列值进行索引了,df['name']会首先把df中的name列单独取出来,由于这是一个str值,因此最后比较的时候也需要加引号,从这些name中取出所有比’b’大的数,最后的结果即如上所示
除了这两个,一般还有atix等,后者的功能也很强大,相当于lociloc的结合,但平时有了前面提到的两个一般就够用了
最后再说两点:
DataFrame的排序

>>> df.sort_values(by=['no'], ascending = False, inplace = True)
>>> df
      name     no
11111    d  223.0
1111     c   11.0
111      b    2.0
11       a    1.0

这个一看参数名就知道了,ascending代表是否按升序排列,True为升序,False则为降序
打开xlsx,并转为DataFrame

import openpyxl
import pandas as pd
import numpy as np
import os
def excel2DF:
    excelFile = openpyxl.load_workbook(filename)
    sheet = excelFile['工作表1']
    i = 1
    # fields代表第一行,级表头
    fields = []
    data = []
    for row in sheet.rows:
        tmpList = []
        for cell in row:
            aa = str(cell.value)
            tmpList.append(aa)
        if i == 1:
            fields = tmpList
        else:
            data.append(tmpList)
        i = i + 1
    data = np.array(data)
    # 获取所有行的三到七列
    data = pd.DataFrame(data[:, 3:10],
                        columns=['a', 'b', 'c', 'd', 'e', 'f', 'g'])
    return data

若有使用不当或可以改进的地方,还望指出,谢谢

猜你喜欢

转载自blog.csdn.net/u013700358/article/details/82120172
今日推荐