一、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=0
或axis='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:显示合并数据中数据的来源情况。