栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

Pyqt5学习笔记:Pandas

Python 更新时间:发布时间: 百科书网 趣学号
Pandas 数据创建 pandas.DataFrame( data, index, columns, dtype, copy) 构造方法
data:一组数据(ndarray、series, map, lists, dict 等类型)
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型 dtype = int。
copy:拷贝数据,默认为 False。
pd.date_range(‘1/1/2000’, periods=8) pd.Series(np.random.randn(5), index=[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]) pd.DataFrame(np.random.randn(8, 3), index=index,columns=[‘A’, ‘B’, ‘C’]) data1 = [[‘a’,1.0],[‘b’,2.0],[‘c’,3.0],]

df1 = pd.DataFrame(data1,columns=[‘key’,‘value’])

data2 = {‘name’:[‘a1’,‘a2’,‘a3’],‘age’:[12,20,18]}

df2= pd.DataFrame(data2,index =[“class1”,‘class2’,‘class3’])

data3 = [{‘a’:1,‘b’:2,‘c’:3},{‘a’:3,‘b’:5,‘c’:3},{‘a’:3,‘b’:2,}]

df3 = pd.DataFrame(data3,dtype=int)

pd.DataFrame(np.random.randn(6,4), index=dates, columns=list(‘ABCD’)) pd.DataFrame(np.arange(16).reshape(4,4),columns=list(‘abcd’)) list1 = np.arange(‘2021-08-01’, ‘2021-08-06’, dtype=np.datetime64)

df = pd.DataFrame(np.arange(20).reshape(5,4),index = list1,columns=list(‘abcd’))

数据操作 数据显示
  • df.head(10)
    df.tail(3)
  • df.index #显示所的索引值
    df.columns #显示所有列标签 df.values #显示所有的值
  • df.axes #显示行列索引值
  • df.describe() #快速统计
    count mean std min 25% 50% 75% max
数据排序
  • df.sort_index(axis=1, ascending=False)

  • df.sort_values(by=‘B’)

数据选择
  • df[‘A’] #按列选择

  • df[0:3] #切片选择行

  • df.loc[dates[0] # 按行选择

  • df.loc[:,[‘A’,‘B’]] #选择AB列

  • dates = pd.date_range(‘20170101’, periods=6) # 选择索引指定的AB部分断面
    df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list(‘ABCD’))
    print(df.loc[‘20170102’:‘20170104’,[‘A’,‘B’]])

  • df.loc[‘20170102’,[‘A’,‘B’] #仅选择索引指定的AB列

  • df.iloc[3] #指定行数

  • df.iloc[3:5,0:2] #指定切片的行范围(3:5)及所需切片的列(AB)

  • df.iloc[[1,2,4],[0,2]#指定切片的行范围(1,2,4)及所需切片的列(AC)

  • df.iloc[1:3,:]

  • df.iloc[1,1] #第一行第一列

  • df[df.A > 0 # 输出所A列都大于0的行

  • df[df > 0] #输出所有大于0的值,如小于0则以NAN取代,shape保持不变

  • df2[df2[‘E’].isin([‘two’,‘four’])] #df2[‘E’]中包含two 和four值的行

索引操作
  • set_index #用于将df中的一行或多行设置为索引
    df.set_index([‘one’],drop=False)
    df.set_index([‘one’,‘two’]) # 设置多索引
    参数drop默认为True,意为将该列设置为索引后从数据中删除,如果设为False,将继续在数据中保留该行
  • reset_index 用于将索引还原成默认值,即从0开始步长为1的数组。 df.reset_index(drop=True)
    参数drop默认值为False,意为将原来的索引做为数据列保留,如果设为True,原来的索引会直接删除
  • 如果要设置的索引不在数据中,可以通过df.index=[‘a’,‘b’,‘c’,‘d’]
数据赋值
  • 按列赋值

    • list = [1,3,5,7,9] df[‘A’] = list df[‘B’] = 0 修改A列或B列的数值
  • 按行赋值

    • df.loc[3]=list df.loc[6]=0 修改整行的数值
  • 多行多列赋值

    • df.loc[[row1,row2],[col1,col2]]=value/valueList
      df.iloc[[rowNo1,rowNo2],[colNo1,colNo2]]=value/valueList
增删改查
  • 按行增加

    • df.loc[‘2021-08-06’] = 0 如果索引值存在则修改数值,如果该索引不存在则增加该该行数据
  • 插入数据

    • df.insert(4,‘e’,[2,3,4,5,6]) # 在第4列插入列名为’e’,数据为[2,3,4,5,6] 数据需与原数组匹配
  • 连接数据

    • pd.concat(objs,axis=0,join=‘outer’,join_axes=None,ignore_index=False)
      objs 一个序列或者是Series、DataFrame对象。
      axis 表示在哪个轴方向上(行或者列)进行连接操作,默认 axis=0 表示行方向。
      join 指定连接方式,取值为{“inner”,“outer”},默认为 outer 表示取并集,inner代表取交集。
      ignore_index 布尔值参数,默认为 False,如果为 True,表示不在连接的轴上使用索引。
      join_axes 表示索引对象的列表。
    • pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=(‘_x’, ‘_y’), copy=True)
      left/right 两个不同的 DataFrame 对象。
      on 指定用于连接的键(即列标签的名字),该键必须同时存在于左右两个 DataFrame 中,如果没有指定,并且其他参数也未指定, 那么将会以
      两个 DataFrame 的列名交集做为连接键。
      left_on 指定左侧 DataFrame 中作连接键的列名。该参数在左、右列标签名不相同,但表达的含义相同时非常有用。
      right_on 指定左侧 DataFrame 中作连接键的列名。
      left_index 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键,若 DataFrame 具有多层
      索引(MultiIndex),则层的数量必须与连接键的数量相等。
      right_index 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键。
      how 要执行的合并类型,从 {‘left’, ‘right’, ‘outer’, ‘inner’} 中取值,默认为“inner”内连接。
      sort 布尔值参数,默认为True,它会将合并后的数据进行排序;若设置为 False,则按照 how 给定的参数值进行排序。
      suffixes 字符串组成的元组。当左右 DataFrame 存在相同列名时,通过该参数可以在相同的列名后附加后缀名,默认为(‘_x’,‘_y’)。
      copy 默认为 True,表示对数据进行复制
    • append语法:DataFrame.append(other, ignore_index=False)¶
        append只有按行合并,没有按列合并,相当于concat按行的简写形式。
      other:单个dataframe、series、dict,或者列表。
      ignore_index:是否忽略掉原来的数据索引。
  • 删除数据

df.pop(‘A’) #删除A列
- df.drop(‘index_name’) #删除行
df.drop(2) #删除第2行
- df.drop(df.index, inplace=True) #清空数据
df=df.drop(index=df.index) #清空数据
- df.drop_duplicates() #删除重复数据

  • 重置标签

    • 重置行列标签

      • df1 = df.reindex(index=[‘1’,‘2’],columns=[‘A’,'B,‘C’])
    • 重命名行列标签

      • df1 = df.rename(columns={‘A’:‘a’,‘B’:‘b’},index={‘1’:“0”})
  • 数据清洗

    • df3.isnull().sum() 每一列中空值的数量
      df3.isnull().sum().sum() 整个dataframe表中空值的总数
    • df3.count(axis=1) 每一行中非空值的数量
      df3.count(axis=0) 每一列中非空值的数量
    • dropna(how, axis, subset,inplace ) 删除空值
      how:how=‘any’ 如果某一行或某一列里任何一个数据有空值就删除;how=‘all’ 如果某一行或某一列里所有数据都是空值就删除。
      axis:axis=0 逢空值剔除整行;axis=1 逢空值剔除列。
      subset:指定列。如果是多个列,用list传递参数。
      添加inplace = True 参数,才能修改源数据
    • df3.fillna(value=0) # 用value参数替换空值
    • df3[“年龄”].fillna(value=df3[“年龄”].mean(), inplace=True) # 用均值填补空值
      df3[“年龄”].fillna(value=df3[“年龄”].median(), inplace=True) # 用中位数填补空值
      df3[“年龄”].fillna(value=df3[“年龄”].mode()[0], inplace=True) # 用众数填补空值
    • df3.fillna(method=‘ffill’, axis=0) # 将空值替换成上一行的值
    • df3.fillna(method=‘backfill’, axis=1) # 将空值替换成下一列值
数据存储 read_csv()
  • pd.read_csv(filepath_or_buffer,header,parse_dates,index_col
  • sep:读取csv文件时指定的分隔符,默认为逗号
    header:将⾏号⽤作列名,且是数据的开头
    header=0表⽰第⼀⾏是数据⽽不是⽂件的第⼀⾏
    header=None,即指认为原始⽂件数据没有列索引,这样read_csv为其⾃动加上列索引{从0开始}
    names 没有被赋值,header 也没赋值: 这种情况下,header为0,即选取文件的第一行作为表头
    names 没有被赋值,header 被赋值:不指定names,指定header为1,则选取第二行当做表头,第二行下面为数据 csv
    **文件有表头并且是第一行,那么names和header都无需指定;
    **csv文件有表头、但表头不是第一行,可能从下面几行开始才是真正的表头和数据,这个时候指定header即可;
    **csv文件没有表头,全部是纯数据,那么我们可以通过names手动生成表头;
    **csv文件有表头、但是这个表头你不想用,这个时候同时指定names和header。先用header选出表头和数据,然
    后再用names将表头替换掉,就等价于将数据读取进来之后再对列名进行rename;
    index_col:读取文件之后所得到的DataFrame的索引,index_col=“name”,将真实的某列当做index(列的数⽬,甚⾄列名)
    除了指定单个列,还可以指定多列作为索引
    usecols:如果一个数据集中有很多列, 读取的时候只想要使用到的列
    dtype:在读取数据的时候,设定字段的类型 dtype={“id”: str}
    na_values:该参数可以配置哪些值需要处理成 NaN: na_values=[“对”, “错”] na_values={“name”: [“错”, “"], “result”: [“对”]} parse_dates:指定某些列为时间类型,这个参数一般搭配date_parser使用。
    date_parser:是用来配合parse_dates参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式
    parse_dates=[“date”], date_parser=lambda x: datetime.strptime(x, “%Y年%m月%d日”))
to_csv
  • DataFrame.to_csv(path_or_buf=None, sep=‘,’, na_rep=‘’, float_format=None, columns=None, header=True, index=True,
    index_label=None, mode=‘w’, encoding=None, compression=‘infer’, quoting=None, quotechar=‘"’, line_terminator=None, chunksize=None,
    date_format=None, doublequote=True, escapechar=None, decimal=‘.’, errors=‘strict’)
  • path_or_buf 字符串或⽂件句柄 默认⽆⽂件路径或对象,如果没有提供,结果将返回为字符串。
    sep 分隔符,sep=‘?’ 使用” ?“分隔,默认值是“ ,”来分隔数据
    na_rep 替换空值,na_rep=‘NA’,如果不写则为空值
    float_format 保留数据格式,默认为 None ,float_format=‘%.2f’ 保留2位小数值
    columns 要写⼊的字段列表,columns=[‘name’,‘age’] 写入name和age列
    header 默认为true,写入列名。如果给定字符串列表,则作为列名的别名,否则不写入列名
    index 布尔值,默认为Ture, 保留行索引 index
    index_label 字符串或序列,或False,默认为None,如果需要,可以使⽤索引列的列标签。如果没有给出,且标题和索引为True,
    则使⽤索引名称。如果数据⽂件使⽤多索引,则应该使⽤这个序列。如果值为False,不打印索引字段。 mode 字符串,默认为"w" ,r : 只能读, 文件必须存在, w : 只能写, 文件不存在可以创建,文件重头写入 a : 只能写, 文件可以
    创建,仅在原文件结尾追加写 r+ : 可读可写, 必须存在, 可在任意位置读写 w+ : 可读可写, 可创建,重头写入 encoding 编码格式,表⽰在输出⽂件中使⽤的编码的字符串,Python3默认为“UTF-8”。
    compression 输出⽂件中使⽤的压缩的字符串,允许值为“gzip”、“bz2”、“xz”,仅在第⼀个参数是⽂件名时使⽤
    line_terminator 默认为 ‘n’ ,在输出⽂件中使⽤的换⾏字符或字符序列。默认为os.linesep,这取决于调⽤此⽅法的操作系统
    (例如, 对于linux为“n”,对于Windows为“rn”)
    date_format ⽇期时间对象的格式字符串
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/869710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号