Dataframe常用问题

一、Dataframe修改某一列的列名

df.rename(columns={'Year_orig':'year','Quarter_orig':'quarter'},inplace=True)

inplace=True修改了原数据

grouped = df_state_unemployment.groupby(['year','state'])
grouped['Points'].sum()

二、通过pandas删除行、列(drop):

删除行

drop方法中,默认是删除行。

如果用axis=0axis='rows',都表示展出行,也可用labels参数删除行。

    a   b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

df.drop(0)                # drop a row, on axis 0 or 'rows'
df.drop(0, axis=0)        # same
df.drop(0, axis='rows')   # same
df.drop(labels=0)         # same
df.drop(labels=[0])       # same

out:

 a   b   c   d   e
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

删除列

del df['columns'] #改变原始数据

#用drop对数据进行删除

df.drop('b', axis=1)         # drop a column
df.drop('b', axis='columns') # same
df.drop(columns='b')         # same
df.drop(columns=['b']) 

df.drop('columns',axis=1,inplace='True') #改变原始数据

#同时删除多列数据

df1.drop(columns=['state_full_x','state_full_y'],inplace=True)

处理列数据之后去重处理

data=data.drop(['商品编码','商品名称','库存','销量','金额'], axis=1)
newdata=data.drop_duplicates(['编码','店铺名称'],'first',False)
import pandas as pd
 
data = pd.read_csv (u"C:\\Users\\...\\data.csv" , header=0, encoding = "GBK")
new = pd.DataFrame()
 
for column in ['销量','金额']:
#'score_hownet','score_boson','score_1how','score_1bos','score_howbos','score_alldict']:
    grouped = data[column].groupby(data['编码']) # 以 编码 为key 求和
    dfnew=grouped.sum()
    new[column]=dfnew
new=new.reset_index()   #   将 编码 ,从index中放入列中
 
data=data.drop(['商品编码','商品名称','库存','销量','金额'], axis=1)
newdata=data.drop_duplicates(['编码','店铺名称'],'first',False)
 
newdata = pd.merge(newdata,new,on='编码')
 
newdata.to_csv('newdata.csv', sep=',', header=True)

三、通过函数关系生成dataframe 新列

df_state_unemployment["quarter"]=df_state_unemployment.apply(lambda x:int(1+(x["month"]-1)/3),axis=1)

以上函数关系通过月份数据可以生成季度数据

import pandas as pd
df = pd.DataFrame({'A':[1,0,-1]})
# df['B'] = df['A'].map(lambda a : 1 if a>0 else 0) #根据列A新增列B,A中大于0的值为1,否则为0
df['B'] = df.apply(lambda a : 1 if a['A']>0 else 0,axis=1) #方式2,lambda a 其实代表的是df。  方式1中指定了列名,不用加axis=1
print(df)

多条件 

import numpy as np
import pandas as pd
 
data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
'year': [2016,2016,2015,2017,2016, 2016],
'population': [2100, 2300, 1000, 700, 500, 500]}
frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])
 
def function(a, b):
    if 'ing' in a and b == 2016:
     return 1 
    else:
     return 0
print(frame, '\n')
frame['test'] = frame.apply(lambda x: function(x.city, x.year), axis = 1)
print(frame)

  year       city  population debt
0  2016    Beijing        2100  NaN
1  2016   Shanghai        2300  NaN
2  2015  Guangzhou        1000  NaN
3  2017   Shenzhen         700  NaN
4  2016   Hangzhou         500  NaN
5  2016  Chongqing         500  NaN 

out: 
   year       city  population debt  test
0  2016    Beijing        2100  NaN     1
1  2016   Shanghai        2300  NaN     0
2  2015  Guangzhou        1000  NaN     0
3  2017   Shenzhen         700  NaN     0
4  2016   Hangzhou         500  NaN     0
5  2016  Chongqing         500  NaN     1

四、分组计算

#根据多条件完成分组
grouped_mue = df_msa_unemployment.groupby(['year','quarter','cd_msa'])
#分组计算
df_group_mue = grouped_mue['unemployment_rate'].sum()
#将分组结果写入dataframe
df_msa_unemployment_Q = pd.DataFrame(df_group_mue)
#可能会出现分组条件默认设置为index,影响数据合并
#需要重置索引,将索引变成列,并补上常规的数字索引
df_msa_unemployment_Q.reset_index(level=None, drop=False, inplace=False, col_level=0,col_fill='')
print(df_msa_unemployment_Q)

1、将DataFrame中的列设置成索引:

DataFrame.set_index(keys, drop=True, append=False, inplace=False,verify_integrity=False)

*keys:接收list,指定要设置成索引的列;
*drop:默认为True,删除作为新索引的列,否则不删除;
*append:追加新的索引值,默认false不追加;
*inplace:是否修改原数据,默认false复制并修改新对象,true时修改原数据。
*verify_integrity:检查新索引是否有重复项。
2、重置索引,将索引变成列,并补上常规的数字索引:

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0,col_fill=’’)

*level:int、str、tuple或list,默认为none,仅从索引中移除给定的级别。默认情况下删除所有级别。
*drop:bool,默认为false,索引列(被设置为索引的列)被还原为普通列,并将索引重置为整数索引,否则直接丢弃索引列。
*inplace:是否修改原数据,默认false复制并修改新对象,true时修改原数据。
*col_level:int或str,默认为0,如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入第一个级别。
*col_fill:对象,默认值’’,如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名。
 

#创建数据
data = pd.DataFrame(data=[['bar','one','z','1'],
                          ['bar','two','v','2'],
                          ['foo','one','x','3'],
                          ['foo','two','w','4']])
out:
    0    1  2  3
0  bar  one  z  1
1  bar  two  v  2
2  foo  one  x  3
3  foo  two  w  4     

#强制修改列名                   
data.columns = ['a','b','c','d']
out:
     a    b  c  d
0  bar  one  z  1
1  bar  two  v  2
2  foo  one  x  3
3  foo  two  w  4

#将‘c列’设置为索引,并替换掉原来的数字索引
data.set_index('c')
out:
     a    b  d
c             
z  bar  one  1
v  bar  two  2
x  foo  one  3
w  foo  two  4

#将索引列重置为列
data.reset_index()
out:
     a    b  d
c             
z  bar  one  1
v  bar  two  2
x  foo  one  3
w  foo  two  4

#将‘c’列设置为索引,并以追加的方式添加为二级索引
data.set_index('c',append=True)
out:
       a    b  d
  c             
0 z  bar  one  1
1 v  bar  two  2
2 x  foo  one  3
3 w  foo  two  4

#将追加的二级索引(level为1)还原成列
data.reset_index(level=1)
out:
   c    a    b  d
0  z  bar  one  1
1  v  bar  two  2
2  x  foo  one  3
3  w  foo  two  4
#level默认none,将所有索引(包括初始数字索引)设置为列,并再次初始化一个新的数字索引。
data.reset_index()
out:
    level_0  c    a    b  d
0        0   z  bar  one  1
1        1   v  bar  two  2
2        2   x  foo  one  3
3        3   w  foo  two  4

五、merge

df1=pd.merge(df1,df_msa_unemployment_Q,on=['quarter','year','cd_msa'],how='left')
print(df1)

参数介绍:

  • left:参与合并的左侧DataFrame;
  • right:参与合并的右侧DataFrame;
  • how:连接方式,有inner、left、right、outer,默认为inner;
  • on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键;
  • left_on:左侧DataFrame中用于连接键的列名,这个参数左右列名不同但代表的含义相同时非常的有 用;
  • right_on:右侧DataFrame中用于连接键的列名;
  • left_index:使用左侧DataFrame中的行索引作为连接键;
  • right_index:使用右侧DataFrame中的行索引作为连接键;
  • sort:默认为True,将合并的数据进行排序,设置为False可以提高性能;
  • suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x', '_y');
  • copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能;
  • indicator:显示合并数据中数据的来源情况。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值