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

posted @ 2019-08-23 12:06  睿晞  阅读(10930)  评论(0编辑  收藏  举报