pandas处理数据
- 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 - 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()
- df.rename() 重新命名列名
rename方法作用: 复制 DataFrame并对其索引index和列标签columns进行赋值。如果希望就地修改某个数据集,传入inplace=True即可
示例:df.rename(columns={averageName:'average'},inplace=True)
- df.mean()
Pandas中的df.mean()函数默认是等价于df.mean(0),即按轴方向求平均,得到每列数据的平均值。
示例:df['average'].mean()
求某一列的平均值 - 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))
- pd[‘列名’].values 获取值
取到的是该列对应的函数值
示例:df['diff_1'].values
- 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']
- np.unique()
unique()是以 数组形式(numpy.ndarray)返回列的所有唯一值 - df.columns 修改列名
示例:df.columns=['Day']
- 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['列名']
- 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'列
- df.sample() 随机选取若干行
只需要数据集中的一部分,并不需要全部的数据。这个时候我们就要对数据集进行随机的抽样。
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)[source]
- n 要抽取的行数 df.sample(n=3,random_state=1) 提取3行数据列表 注意,使用random_state,以确保可重复性的
- frac 抽取行的比例 例如frac=0.8,就是抽取其中80%。 df.sample(frac=0.8, replace=True, random_state=1)
- replace 是否为有放回抽样,True:有放回抽样 False:未放回抽样 True:取行数据后,可以重复放回后再取 False:取行数据后不放回,下次取其它行数据
注意:当N>总数据容量,replace设置为值时有效 - weights 字符索引或概率数组
- axis=0:为行字符索引或概率数组 axis=1:为列字符索引或概率数组
- random_state int: 随机数发生器种子 或numpy.random.RandomState
random_state=None,取得数据不重复 random_state=1,可以取得重复数据 - axis 选择抽取数据的行还是列 axis=0:抽取行 axis=1:抽取列 注意:当N>总数据容量,replace设置为值时有效 ,此时随机的抽,可能会重复,可以获得超过表本身数目更多的数据,来进行升采样
- df[a][df[x]==条件]
根据后面中括号中条件为真,修改某一列的修改df中x列满足条件的a列的数据
因此可以在第二个中括号中填写df数据中要满足的调节,第一个中括号为要修改的列
示例:
data['weight'][data['label_M']==0] = 1 #修改data中的label_M为0的weight列的值为1
OS 笔记
时间转换函数
zipfile 函数
Python的函数
Pickle模块
Numpy 模块
Original: https://blog.csdn.net/weixin_41601540/article/details/114212588
Author: sendoh24
Title: 数据处理笔记
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/740556/
转载文章受原作者版权保护。转载请注明原作者出处!