数据处理笔记

数据处理笔记

pandas处理数据

  1. pd.reset_index()
    重置index索引并不删除空行,当DataFrame或Series类型的数据不是连续的索引或索引的输运不对,可以使用reset_index()重置索引。
    DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
    drop = True 表示不保留原来的索引,即删除原来的索引,只保留新的索引
    inplace=True 表示对原表生效
    示例:df.reset_index(drop=True,inplace=True) #
    相关语法:set_index

  2. pd.dropna() 删除空值,即删除包含nan(空值)
    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
    参数说明:

    axis default 0指行,1为列
    how {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的行
    thresh int,保留含有int个非空值的行
    subset 对特定的列进行缺失值删除处理
    inplace 这个很常见,True表示就地更改

    示例:df.dropna()

  3. df.rename() 重新命名列名
    rename方法作用: 复制 DataFrame并对其索引index和列标签columns进行赋值。如果希望就地修改某个数据集,传入inplace=True即可
    示例:df.rename(columns={averageName:'average'},inplace=True)

  4. df.mean()
    Pandas中的df.mean()函数默认是等价于df.mean(0),即按轴方向求平均,得到每列数据的平均值。
    示例:df['average'].mean()求某一列的平均值

  5. df.shift(periods=1, freq=None, axis=0) 移动
    periods:类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值是1,1就表示移动一次,注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。
    freq: DateOffset, timedelta, or time rule string,可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引,而数据值没有发生变化。
    示例:df1.shift(periods=1,freq=datetime.timedelta(1))

  6. pd[‘列名’].values 获取值
    取到的是该列对应的函数值
    示例:df['diff_1'].values

  7. df.loc[] 区域选取
     区域选取可以从多个维度(行和列)对数据进行筛选,可以通过df.loc[],df.iloc[],df.ix[]三种方法实现。采用df.loc[],df.iloc[],df.ix[]这三种方法进行数据选取时,方括号内必须有两个参数,第一个参数是对行的筛选条件,第二个参数是对列的筛选条件,两个参数用逗号隔开。df.loc[],df.iloc[],df.ix[]的区别如下:
    df.loc[]只能使用标签索引,不能使用整数索引,通过便签索引切边进行筛选时,前闭后闭。
    df.iloc[]只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时,前闭后开。
    df.ix[]既可以使用标签索引,也可以使用整数索引。
    示例:df.loc['a', :] df.loc['a':'d', :] df.loc[df['age']>30,:] df.loc[lambda df:df['age'] > 30, :] df.loc[:, 'name'] df.iloc[1, :] df.loc[:,'Day'] = df['TimeStamp']

  8. np.unique()
    unique()是以 数组形式(numpy.ndarray)返回列的所有唯一值

  9. df.columns 修改列名
    示例:df.columns=['Day']

  10. df.groupby()功能:分组
    groupby + agg(聚集函数们): 分组后,对各组应用一些函数,如’sum’,‘mean’,‘max’,‘min’…
    示例:df.groupby('Day')[feature].agg(函数名) 如:‘sum’、'mean’等

  11. pd.merge() 合并Dataframe
    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, indicator=False, validate=None

    left: 拼接的左侧DataFrame对象 right: 拼接的右侧DataFrame对象
    on: 要加入的列或索引级别名称。必须在左侧和右侧DataFrame对象中找到。 如果未传递left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
    left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
    right_on: 左侧DataFrame中的列或索引级别用作键。
    可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。 left_index:
    如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。
    对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
    right_index: 与left_index功能相似。
    how: One of ‘left’, ‘right’,‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
    sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
    suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
    copy:始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
    indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。
    _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。

  12. df.rolling() 时间窗口函数
    DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None) 后接min、max、mean等函数表示对这个窗口的操作
    window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即从自己开始向前几个数据。如果是offset类型,表示时间窗的大小。pandas offset相关可以参考这里
    min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。
    center:是否使用window的中间值作为label,默认为false。只能在window是int时使用。
    其中的在计算时遇到的nan值做任何计算都为nan值

  13. pd.read_csv()
    pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, prefix=None,nrow=None,encoding =None)

    1.filepath_or_buffer:(这是唯一一个必须有的参数,其它都是按需求选用的) 文件所在处的路径
    2.sep: 指定分隔符,默认为逗号’,’
    3.delimiter : str, default None 定界符,备选分隔符(如果指定该参数,则sep参数失效)
    4.header:int or list of ints, default ‘infer’ 指定哪一行作为表头。默认设置为0(即第一行作为表头),如果没有表头的话,要修改参数,设置header=None
    5.names: 指定列的名称,用列表表示。一般我们没有表头,即header=None时,这个用来添加列名就很有用啦!
    6.index_col: 指定哪一列数据作为行索引,可以是一列,也可以多列。多列的话,会看到一个分层索引
    7.prefix: 给列名添加前缀。如prefix=“x”,会出来"x1"、“x2”、"x3"酱纸
    8.nrows : int, default None 需要读取的行数(从文件头开始算起)
    9.encoding: 乱码的时候用这个就是了,官网文档看看用哪个

  14. df.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, c)
    参数说明:

    path_or_buf=None 字符串或文件目录,文件路径或对象,如果未提供,结果将作为字符串返回。如果传递了一个文件对象,应该用换行= ’ ',禁用通用换行符。 sep=’,’ 输出文件的字段分隔符,默认点 na_rep=’’,缺失数据填充
    float_format=None,小数点保留几位
    columns=None, 要写入的字段
    header=True,列名的别名 默认header=0,如果没有表头,设置header=None,表示我没有表头呀!
    index=True,写行名(索引)
    index_label=None,索引列的列标签。如果没有给出,并且header和index为True,则使用索引名。如果对象使用多索引,应该给出一个序列。如果不打印索引名称的字段。使用index
    _ label = Falser以便在R中更容易导入
    mode=‘w’ 写入模式,默认为w, r : 只能读, 必须存在, 可在任意位置读取 w : 只能写, 可以不存在, 必会擦掉原有内容从头写 a : 只能写, 可以不存在, 必不能修改原有内容, 只能在结尾追加写, 文件指针无效 r+ : 可读可写, 必须存在, 可在任意位置读写, 读与写共用同一个指针 w+ : 可读可写, 可以不存在, 必会擦掉原有内容从头写 a+ : 可读可写, 可以不存在, 必不能修改原有内容, 只能在结尾追加写, 文件指针只对读有效(写操作会将文件指针移动到文件尾)
    encoding=None , 表示输出文件中使用的编码的字符串,默认为“utf-8”

    示例:df.to_csv('../data'+'/'+f, index=False, header=False, mode='a+')

  15. pd.concat() 拼接函数
    pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)
    注:行是一定会拼接的,如果列不完全相同,默认补全NaN再进行拼接
    参数说明:

    objs: series,dataframe或者是panel构成的序列lsit ,注意是list列表
    axis: 需要合并链接的轴,0是行,1是列 。 当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并
    join:连接的方式 inner,或者outer。如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。
    keys: 相接的时候在加上一个层次的key来识别数据源自于哪张表,可以增加key参数

    代码示例:

    frames = [df1, df2, df3]
    result = pd.concat(frames)
    result = pd.concat(frames, keys=['x', 'y', 'z'])
    

    pd.merge()函数只能实现两个表的拼接。

    append是series和dataframe的方法,使用它就是默认沿着列进行凭借(axis = 0,列对齐)
    result = df1.append(df2)

  16. pd.read_pickle() 和df.to_pickle()
    df.to_pickle 使用DataFrame的to_pickle属性就可以生成pickle文件对数据进行永久储存
    pd.read_pickle 使用pandas库的pd.read_pickle读取pickle数据
    pickle 文件,以.pkl 为后缀名

    对于需要在数据中保持一定程度持久性的应用程序,Pickling非常有用。 您的程序的状态数据可以保存到磁盘,因此您可以稍后继续处理它。
    它还可用于通过传输控制协议(TCP)或套接字连接(Socket)发送数据,或将python对象存储在数据库中。
    当您使用机器学习算法时,Pickle非常有用,您可以将它们保存在以后能够进行新的预测,而无需重新编写所有内容或重新训练模型。

  17. df.iterrows()
    iterrows() 是在数据框中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。
    for循环遍历dataframe,返回有一个元祖类型,第一个是行的索引,第二个是series,是每一行的内容。
    示例:

     for index, row in df.iterrows():
    	print(index)                      # 行号
    	print(row)          				#这一行的内容,row['列名']
    
  18. pd.drop() 删除数据
    DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

    label : 要删除的行的索引或列的名称,具体行或列由aixs决定,label可以为列表,选择要删除的部分
    axis=0,指删除index,因此删除columns时要指定axis=1;
    inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe;
    inplace=True,则会直接在原数据上进行删除操作,删除后就回不来了

    示例:

    _magn_res.drop(['label_M','label_long','label_lati'],axis=1,inplace=True)   
    # 删除_magn_res中的'label_M','label_long','label_lati'列
    
  19. df.sample() 随机选取若干行
    只需要数据集中的一部分,并不需要全部的数据。这个时候我们就要对数据集进行随机的抽样。
    DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)[source]

    1. n 要抽取的行数 df.sample(n=3,random_state=1) 提取3行数据列表 注意,使用random_state,以确保可重复性的
    2. frac 抽取行的比例 例如frac=0.8,就是抽取其中80%。 df.sample(frac=0.8, replace=True, random_state=1)
    3. replace 是否为有放回抽样,True:有放回抽样 False:未放回抽样 True:取行数据后,可以重复放回后再取 False:取行数据后不放回,下次取其它行数据
      注意:当N>总数据容量,replace设置为值时有效
    4. weights 字符索引或概率数组
    5. axis=0:为行字符索引或概率数组 axis=1:为列字符索引或概率数组
    6. random_state int: 随机数发生器种子 或numpy.random.RandomState
      random_state=None,取得数据不重复 random_state=1,可以取得重复数据
    7. axis 选择抽取数据的行还是列 axis=0:抽取行 axis=1:抽取列

    注意:当N>总数据容量,replace设置为值时有效 ,此时随机的抽,可能会重复,可以获得超过表本身数目更多的数据,来进行升采样

  20. df[a][df[x]==条件]
    根据后面中括号中条件为真,修改某一列的修改df中x列满足条件的a列的数据
    因此可以在第二个中括号中填写df数据中要满足的调节,第一个中括号为要修改的列
    示例:

    data['weight'][data['label_M']==0] = 1  #修改data中的label_M为0的weight列的值为1
    

OS 笔记

  1. os.listdir()
    该方法用于返回指定文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序,不包括‘.’和‘…’即使其在文件夹中。
    注意,返回的是目标文件夹中包含的文件或文件夹的名字,通常用于提取文件夹中文件,用一个循环遍历所有文件。
    os.listdir('path') 中列出目录路径,即里面的参数path
    示例:file_list = os.listdir(Folder_Path+'/'+n)
  2. **os.makedirs()**用来创建多层目录(单层请用os.mkdir)
    os.makedirs(name, mode=0o777, exist_ok=False)
    示例:os.makedirs(Folder_Path+'/'+EMSave_Dir+'/'+n, exist_ok=True)

    参数说明:
    name:你想创建的目录名
    mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。
    exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。

  3. os.path.dirname(file)
    功能:去掉文件名,返回目录。返回的是此文件所在的绝对路径,即Python文件所在的文件夹
    示例:os.path.dirname("E:/Read_File/read_yaml.py") 返回的是E:/Read_File
  4. os.getcwd()
    返回当前工作目录。获取当前工作目录,也就是在哪个目录下运行这个程序。
    示例:print(os.getcwd())
  5. os.path.join() 路径拼接
    连接两个或更多的路径名组件
    • 如果各组件名首字母不包含’/’,则函数会自动加上
    • 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始
    • 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
      示例: os.path.join('111','000/333')

时间转换函数

  1. python自带的包:import datetime

  2. datetime.datetime.now()返回现在的时间

  3. 将字符串类型转换为日期格式:datetime.datetime.strptime()
    我们输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串。例如: datetime.datetime.strptime(‘2019-5-1 5:54:45’, ‘%Y-%m-%d %H:%M:%S’)

    - %y 两位数的年份表示(00-99)
    - %Y 四位数的年份表示(000-9999)
    - %m 月份(01-12)
    - %d 月内中的一天(0-31)
    - %H 24小时制小时数(0-23)
    - %I 12小时制小时数(01-12)
    - %M 分钟数(00=59)
    - %S 秒(00-59)
    - %a 本地简化星期名称
    - %A 本地完整星期名称
    - %b 本地简化的月份名称
    - %B 本地完整的月份名称
    - %c 本地相应的日期表示和时间表示
    - %j 年内的一天(001-366)
    - %p 本地A.M.或P.M.的等价符
    - %U 一年中的星期数(00-53)星期天为星期的开始
    - %w 星期(0-6),星期天为星期的开始
    - %W 一年中的星期数(00-53)星期一为星期的开始
    - %x 本地相应的日期表示
    - %X 本地相应的时间表示
    - %Z 当前时区的名称
    
  4. 日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
    后台提取到datetime对象后,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:datetime.datetime.strftime(datetime.now(), “%Y-%m-%d %H:%M”)

    • 或者直接使用:日期.strftime(‘预期的字符串格式’) 例:begin_time.strftime('%Y-%m-%d-%H')
  5. datetime日期格式中的属性

    • datetime日期格式可以直接根据日期的方式进行比较大小
    • datetime的:日期.day返回日期的day
    • datetime可以做加减:加减之后结果可以用day,hour,second查看相差的结果,其中hour,minute,second限定在24小时以内
  6. datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。
    datetime.timedelta(days,hours,minutes)来设置差的时间,然后与日期时间相加减来查询需要的时间
    例:datetime.timedelta(days=2)

  7. 获取今天的日期格式(年-月-日)
    datetime.date.today()

  8. 时间戳中 86400 为一天秒数
    时间差做差然后除以86400为相差的天数

zipfile 函数

  1. 用于解压文件
    函数引入:import zipfile

  2. zipfile.ZipFile()
    class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
    示例:zipfile.ZipFile(Folder_Path+'/'+n+'/'+f, "r")

    创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-likeobject);参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可为’w’或’a’,'w’表示新建一个zip文档或覆盖一个已经存在的zip文档,'a’表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。

  3. ZipFile常用的方法和属性

    • ZipFile.namelist()
      获取zip文档内所有文件的名称列表。
      示例:len(zFile.namelist())
    • ZipFile.getinfo(name):
      获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。将在下 面 具体介绍该对象。
    • ZipFile.infolist()
      获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。
    • ZipFile.extract(member[, path[, pwd]])
      将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;参数pwd为解压密码。
      示例:zFile.extract(zFile.namelist()[0], Folder_Path+'/'+n)
    • ZipFile.close()
      ZipeFlie 类对象的关闭

Python的函数

  1. python中type、dtype、astype 的用法
    type 获取数据类型
    dtype 数组元素的类型
    astype 修改数据类型
    示例:df['Day']astype(int)

  2. endswith()
    作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型
    相关函数:判断字符串开头 startswith()
    string.endswith(str, beg=[0,end=len(string)])
    示例:f.endswith("zip")
    参数说明:

    string: 被检测的字符串
    str: 指定的字符或者子字符串(可以使用元组,会逐一匹配)
    beg: 设置字符串检测的起始位置(可选,从左数起)
    end: 设置字符串检测的结束位置(可选,从左数起) 如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查
    返回值: 如果检测到字符串,则返回True,否则返回False。

  3. assert()
    assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 常在测试中用
    示例: assert len(zFile.namelist()) == 1

  4. format 格式化函数
    一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
    基本语法是通过 {} 和 : 来代替以前的 % 。
    format 函数可以接受不限个参数,位置可以不按顺序。
    示例:"{} {}".format("hello", "world")# 不设置指定位置,按默认顺序
    "{1} {0} {1}".format("hello", "world")# 设置指定位置

Pickle模块

  1. pickle中的dump() 方法
    引入模块: from pickle import dump
    pickle.dumps(obj, file)
    注释:序列化对象,将对象obj保存到文件file中去。
    obj表示要保存的对象,
    file必须有write()接口,file可以是一个以’w’打开的文件或者是一个String对象,也可以是任何可以实现write()接口的对象。
    示例:

    with open('./new_tokenizer_v5.pickle', 'wb') as handle:
    	pickle.dump(tokenizer, handle)
    
  2. pickle中的load() 方法
    pickle.load(file)
    注释:反序列化对象,将文件中的数据解析为一个python对象。file中有read()接口和readline()接口
    示例:

    with open(path, 'rb') as ff:
       	s = load(ff)
    
  3. 存储为文件的后缀名可以为.bin文件,.bin 是个万能的后缀。

Numpy 模块

  1. linspacy 创建等差数列
    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
    在start和stop之间返回均匀间隔的数据

    start:返回样本数据开始点
    stop:返回样本数据结束点
    num:生成的样本数据量,默认为50
    endpoint:True则包含stop;False则不包含stop
    retstep:If True, return (samples, step), where step is the spacing between samples.(即如果为True则结果会给出数据间隔)
    dtype:输出数组类型 axis:0(默认)或-1
    示例:

    >>> np.linspace(2.0, 3.0, num=5)
    array([ 2.0 , 2.25,  2.5 ,  2.75,  3. 0 ])
    
  2. np.sin()|np.cos()
    a为ndarray对象
    np.sin(a) 对矩阵a中每个元素取正弦

    x是单个数据值:
    np.sin(x) 对x元素取正弦
    np.pi:是一个常量,代表3.1415926…

  3. np.zeros
    返回来一个给定形状和类型的用0填充的数组;
    参数:

    zeros(shape, dtype=float, order=‘C’)
    shape:形状
    dtype:数据类型,可选参数,默认numpy.float64
    order:可选参数,c代表与c语言类似,行优先;F代表列优先

    示例:
    np.zeros((2,5),dtype= np.int)

  4. reshape()
    numpy.reshape(a, newshape, order='C')
    newshape:新的格式——整数或整数数组,如(2,3)表示2行3列。新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量。如果是整数,则结果将是长度的一维数组,所以这个整数必须等于a中元素数量。若这里是一个整数数组,那么其中一个数据可以为-1。在这种情况下,这个个值python会自动从根据第二个数值和剩余维度推断出来。
    train_x.reshape(-1, 5, INPUT_FEATURES_NUM)

猜你喜欢

转载自blog.csdn.net/weixin_41601540/article/details/114212588