zoukankan      html  css  js  c++  java
  • Pandas之csv文件对列行的相关操作

    1.Pandas对数据某一列删除

    1.删除列
    import pandas as pd
    df = pd.read_csv(file)
    #axis=1就是删除列
    df.drop(['列名1','列名2'], axis=1)
    
    2.删除记录,也就是行
    import pandas as pd
    df = pd.read_csv(file)
    #axis=0就是删除记录也就是行
    df.drop([0,1,3], axis=0)
    

    2.Pandas之修改列名

    1.第一种是没有表头,想要添加表头
    因为csv文件是没有表头的,但是默认会把第一行作为表头,而实际上可能第一行就是我们的数据,不能够丢失。
    所以要做read_csv函数参数加上header=None,然后再进行保存文件,这样系统就会加上0,1这样的表头了,再次打开,就可以使用rename函数进行表头的更改了。
    import pandas as pd
    data2 = pd.read_csv('D:/transpond_data_1.csv')
    data2.head()
    Out:
    	0	1
    0	mrMzW0lLIA	0
    1	mqJrVB2hb6	0
    2	m7nJFCgLiK	0
    3	mSFZpU8qVB	0
    4	mjBQVsjogW	0
    上面这个已经是保存后的有表头的文件了,可以看到就是0,1默认。
    df = pd.DataFrame(data2)
    df = df.rename(columns={'0':'mid_c','1':'num'})
    print(df)
    Out:
                  mid_c  num
    0        mrMzW0lLIA    0
    1        mqJrVB2hb6    0
    2        m7nJFCgLiK    0
    3        mSFZpU8qVB    0
    4        mjBQVsjogW    0
    ...             ...  ...
    1619147  mdO38FApFD    0
    1619148  mNlc2caNpk    0
    1619149  mkbybukSaa    0
    1619150  mTStAdjFQt    0
    1619151  mA3atazmJ6    0
    最后再进行保存文件
    df = pd.DataFrame(df,columns=['mid_c','num'])
    print(df)
    df.to_csv('D:\transpond_data.csv',index=False,encoding='utf-8')
    已经改成功了。
    
    2.第二种是有表头直接进行改表头
    可以直接打开文件,进行rename函数的使用,最后进行保存,省去了没有表头,进行系统默认添加表头这一步。
    

    3.pandas操作csv多个列,生成新的列

    import pandas as pd
    df = pd.read_csv(file)
    df.eval('new1 = 气温 + 湿度 + PM2P5' , inplace=True)
    #inplace这个参数表示是否在原数据上进行操作
    这样new1这一列就是通过该文件中的其他几列通过运算得出的新列,直接添加在该文件上。
    
    df.query("age==24")
    这样就可以把列age中等于24的选出来了。
    #注意:query后面只支持string形式的值,而‘age’==24返回的是一个bool类型,结果不是true就是false,所以需要进行如上操作"age==24",才可返回正确结果
    

    4.pandas去除文件中的重复项

    DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
    
    • subset : column label or sequence of labels, optional
      用来指定特定的列,默认所有列
    • keep : {‘first’, ‘last’, False}, default ‘first’
      删除重复项并保留第一次出现的项
    • inplace : boolean, default False
      是直接在原来数据上修改还是保留一个副本
    df.drop_duplicates('B','first',inplace = True)
    #表示删除B列中重复的项,first保留第一次出现的项,在原数据上进行操作。
    

    5.pandas之拼接函数merge()

    • pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。

    • 用法

    DataFrame1.merge(DataFrame2, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(’_x’, ‘_y’))
    
    参数	说明
    how	默认为inner,可设为inner/outer/left/right
    on	根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置)
    left_on	左连接,以DataFrame1中用作连接键的列
    right_on	右连接,以DataFrame2中用作连接键的列
    left_index	将DataFrame1行索引用作连接键
    right_index	将DataFrame2行索引用作连接键
    sort	根据连接键对合并后的数据进行排列,默认为True
    suffixes	对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别
    
    • 用例
    #利用字典dict创建数据框
    dataDf1=pd.DataFrame({'lkey':['foo','bar','baz','foo'],
                         'value':[1,2,3,4]})
    dataDf2=pd.DataFrame({'rkey':['foo','bar','qux','bar'],
                         'value':[5,6,7,8]})
    print(dataDf1)
    print(dataDf2)
    >>>
      lkey  value
    0  foo      1
    1  bar      2
    2  baz      3
    3  foo      4
    
      rkey  value
    0  foo      5
    1  bar      6
    2  qux      7
    3  bar      8
    
    
    #inner链接
    dataLfDf=dataDf1.merge(dataDf2, left_on='lkey',right_on='rkey')
    >>>
      lkey  value_x rkey  value_y
    0  foo        1  foo        5
    1  foo        4  foo        5
    2  bar        2  bar        6
    3  bar        2  bar        8
    
    #Right链接
    dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey',how='right')
    >>>
      lkey  value_x rkey  value_y
    0  foo      1.0  foo        5
    1  foo      4.0  foo        5
    2  bar      2.0  bar        6
    3  bar      2.0  bar        8
    4  NaN      NaN  qux        7
    
    #Outer链接
    dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey', how='outer')
    >>>
      lkey  value_x rkey  value_y
    0  foo      1.0  foo      5.0
    1  foo      4.0  foo      5.0
    2  bar      2.0  bar      6.0
    3  bar      2.0  bar      8.0
    4  baz      3.0  NaN      NaN
    5  NaN      NaN  qux      7.0
    
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    安装虚拟机及学习linux系统 20155222卢梓杰
    技能获取与编程学习 卢梓杰20155222
    人生第一篇博客
    20155228 2016-2017-2 《Java程序设计》第1周学习总结
    20155228 基于VirtualBox安装Ubuntu和学习linux命令的学习经历和心得
    20155228 获取技能的成功经验和关于C语言学习的调查
    20155228 你期望的师生关系是什么?
    预备作业03:安装虚拟机
    足球运动训练心得及经验分析-c语言学习调查
    我期望的师生关系
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11399226.html
Copyright © 2011-2022 走看看