pandas

作者: dingtom | 来源:发表于2020-04-03 22:30 被阅读0次
    import pandas as pd
    a = [1, 2, 3, 4]
    p = [1, 2, 3, 4]
    r = [1, 2, 3, 4]
    f = [1, 2, 3, 4]
    df = pd.DataFrame({'a':a, 'p':p, 'r':r, 'f':f}, index=['LSTM_FCN', 'LSTM_MCNN', 'BiLSTM_FCN','BiLSTM_MCNN'])
    print(df)
    df.to_csv("./result/result.csv", index=True)
    
    result = all_metric(y_trues, y_preds, method_name=method_name)
    df = pd.read_csv('./result/result.csv', index_col=0)
    df.loc[method_name] = result
    print(df)
    df.to_csv("./result/result.csv", index=True)
    plot_confusion_matrix(y_trues, y_preds, svg_name='./result/{}'.format(method_name))
    

    导入数据

    • pd.read_csv(filename,encoding='gbk',sep='\t'):从CSV文件导入数据

    读取tsv文件
    data = pd.read_csv(filename, sep='\t').values

    • pd.read_table(filename):从限定分隔符的文本文件导入数据
    • pd.read_excel(filename):从Excel文件导入数据
    • pd.read_sql(query, connection_object):从SQL表/库导入数据
    • pd.read_json(json_string):从JSON格式的字符串导入数据
    • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
    • pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
    • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

    生成DataFrame

    iris_data = pd.DataFrame( iris.data, 
                              columns=iris.feature_names )
    iris_data['species'] = iris.target_names[iris.target]
    iris_data.head(3).append(iris_data.tail(3))
    

    分箱

    group_names = ['不及格','及格','良','优秀']
    cuts = pd.cut(scores,grades,labels=group_names)
    

    将成绩均匀的分在四个等长的箱子中,precision=2的选项将精度控制在两位

    cuts = pd.cut(scores,4,precision=2)
    

    qcut()可以生成指定的箱子数,然后使每个箱子都具有相同数量的数据


    pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

    frame:要处理的数据集。
    id_vars:不需要被转换的列名。
    value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
    var_name和value_name是自定义设置对应的列名。
    col_level :如果列是MultiIndex,则使用此级别。

    d = {'col1': ['a','a','a','b','b'], 'col2': [2,2,2,2,2],'col3':['c','c','c','d','d']}
    df = pd.DataFrame(data=d)
    pd.melt(df,id_vars=['col2'],value_vars=['col1'],var_name='hi',value_name='hello')
    

    取行、列

    loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)
    iloc函数:通过行号来取行数据(如取第二行的数据)

    data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('ABCD'))
    
    取索引为'a'的行
    In[2]: data.loc['a']
    取第一行数据,索引为'a'的行就是第一行,所以结果相同
    In[3]: data.iloc[0]
    
    取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]
    In[4]:data.loc[:,['A']] 
    取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
    In[5]:data.iloc[:,[0]] 
    

    删除插入

    删除gender列,不改变原来的data数据,返回删除后的新表data_2。axis为1表示删除列,0表示删除行。inplace为True表示直接对原表修改。
    data_2 = data.drop('gender', axis=1, inplace=False)
    改变某一列的位置。如:先删除gender列,然后在原表data中第0列插入被删掉的列。
    data.insert(0, '性别',data.pop('gender'))
    pop返回删除的列,插入到第0列,并取新名为'性别'
    直接在原数据上删除列
    del data['性别']
    

    one-hot

    pd.get_dummies(
    data,
    prefix=None,
    prefix_sep='_',
    dummy_na=False,
    columns=None,
    sparse=False,
    drop_first=False,
    dtype=None,
    )

    pd.get_dummies(all_df['MSSubClass'], prefix='MSSubClass').head()
    

    pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

    参数解释:
    frame:要处理的数据集。
    id_vars:不需要被转换的列名。
    value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
    var_name和value_name是自定义设置对应的列名。
    col_level :如果列是MultiIndex,则使用此级别。


    pd.melt(df,id_vars=['col2'],value_vars=['col1'],var_name='hi',value_name='hello')
    

    profile

    数据整体概览、变量探索、相关性计算、缺失值情况和抽样展示

    profile= pandas_profiling.ProfileReport(adult)
    profile.to_file(outputfile = "output_file.html")
    

    合并

    https://blog.csdn.net/weixin_42782150/article/details/89546357

    pd.concat([df1,df2],sort=False)

    axis :默认为0,为按行拼接;1 为按列拼接
    ignore_index: 默认为False,会根据索引进行拼接;True 则会忽略原有索引,重建新索引
    join: 为拼接方式,包括 inner,outer
    sort: True 表示按索引排序



    merge函数

    how:数据合并的方式。

    left:基于左dataframe列的数据合并;right:基于右dataframe列的数据合并;outer:基于列的数据外合并(取并集);inner:基于列的数据内合并(取交集);默认为'inner'。

    on:基于相同列的合并
    left_on/right_on:左/右dataframe合并的列名。
    left_index/right_index:是否以index作为数据合并的列名,True表示是。
    sort:根据dataframe合并的keys排序,默认是。
    suffixes:若有相同列且该列没有作为合并的列,可通过suffixes设置该列的后缀名,一般为元组和列表类型



    Groupby

    #创建一个DataFrame
    import pandas as pd
    import numpy as np
    rng=np.random.RandomState(0)
    df=pd.DataFrame({'key':list('ABCABC'),'data1':range(6),'data2':rng.randint(0,10,6)})
     
    #输出的结果是这样的
    

    data1 data2 key
    0 0 5 A
    1 1 0 B
    2 2 3 C
    3 3 3 A
    4 4 7 B
    5 5 9 C

    然后我们分别用apply,agg,transform三个函数去处理分组对象:

    #创建一个分组的迭代器
    grouped=df.groupby('key') 
    #补充一下,如果大家想看grouped到底把原DataFrame分成什么样子了,可以试试以下代码(实际是一个含分组标签和分组DataFrame的元祖,括号使用的是元组的拆分属性)
    for (key,group) in grouped:
        print(key)
        print(group)
    

    A
    data1 data2 key
    0 0 5 A
    3 3 3 A
    B
    data1 data2 key
    1 1 0 B
    4 4 7 B
    C
    data1 data2 key
    2 2 3 C
    5 5 9 C

    #使用apply
    grouped.apply(sum)
    

    key data1 data2 key
    A 3 8 AA
    B 5 7 BB
    C 7 12 CC

    #使用agg
    grouped.agg(sum)
    

    key data1 data2
    A 3 8
    B 5 7
    C 7 12

    #使用transform
    grouped.transform(sum)
    

    data1 data2
    0 3 8
    1 5 7
    2 7 12
    3 3 8
    4 5 7
    5 7 12

    DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

    n,要抽取的行数
    random_state,确保可重复性
    frac,抽取行的比例
    replace,是否为有放回抽样True:有放回抽样
    weights,字符索引或概率数组axis=0:为行字符索引或概率数组axis=1:为列字符索引或概率数组
    axis,选择抽取数据的行还是列axis=0:抽取行axis=1:抽取列

    导出数据

    df.to_csv(filename):导出数据到CSV文件
    df.to_excel(filename):导出数据到Excel文件
    df.to_sql(table_name, connection_object):导出数据到SQL表
    df.to_json(filename):以Json格式导出数据到文本文件

    创建测试对象

    pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
    pd.Series(my_list):从可迭代对象my_list创建一个Series对象
    df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引

    查看、检查数据

    df.head(n):查看DataFrame对象的前n行
    df.tail(n):查看DataFrame对象的最后n行
    df.shape:查看行数和列数
    df.info():查看索引、数据类型和内存信息
    df.describe():查看数值型列的汇总统计
    s.value_counts(dropna=False):查看Series对象的唯一值和计数
    df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数

    数据选取

    s.iloc[0]:按位置选取数据
    s.loc['index_one']:按索引选取数据

    df.query("(age==18)&(sex=='male)")条件选取

    数据清理

    df.columns = ['a','b','c']:重命名列名
    pd.isnull()
    pd.notnull()
    df.dropna():删除所有包含空值的行
    df.dropna(axis=1):删除所有包含空值的列
    df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
    df.fillna(x):用x替换DataFrame对象中所有的空值
    s.astype(float):将Series中的数据类型更改为float类型
    s.replace(1,'one'):用‘one’代替所有等于1的值
    s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
    df.rename(columns=lambda x: x + 1):批量更改列名
    df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
    df.set_index('column_one'):更改索引列
    df.rename(index=lambda x: x + 1):批量重命名索引

    数据处理:Filter、Sort和GroupBy

    s.T转置
    df[df[col] > 0.5]:选择col列的值大于0.5的行

    df.sort_values(col1):按照列col1排序数据,默认升序排列
    df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据

    df.groupby(col):返回一个按列col进行分组的Groupby对象
    df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
    df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
    df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
    df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
    data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
    data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

    数据合并

    df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
    df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join

    数据统计

    df.describe():查看数据值列的汇总统计
    df.mean():返回所有列的均值
    df.corr():返回列与列之间的相关系数
    df.count():返回每一列中的非空值的个数
    df.median():返回每一列的中位数

    df.unique()所有值
    df.cumsum()累加
    pd.cut(df.salary, bins=10)分桶

    相关文章

      网友评论

          本文标题:pandas

          本文链接:https://www.haomeiwen.com/subject/bliwjhtx.html