pandas修改DataFrame列名的方法
一、更改DataFrame的某些值
df1.loc[0,‘age’]=25 # 思路:先用loc找到要更改的值,再用赋值(=)的方法实现更换值
df1.iloc[0,2]=25 # iloc:用索引位置来查找
at 、iat只能更换单个值
df1.at[0,‘age’]=25 # iat 用来取某个单值,参数只能用数字索引
df1.iat[0,2]=25
二、插入新增列、行
df1[‘city’]=[‘北京’,‘山西’,‘湖北’,‘澳门’] # 给city列赋值
col_name=df1.columns.tolist() # 将数据框的列名全部提取出来存放在列表里
print(col_name)
col_name.insert(2,‘city’) # 在列索引为2的位置插入一列,列名为:city,刚插入时不会有值,整列都是NaN
df1=df1.reindex(columns=col_name) # DataFrame.reindex() 对原行/列索引重新构建索引值
new=pd.DataFrame({‘name’:‘lisa’,
‘gender’:‘F’,
‘city’:‘北京’,
‘age’:19,
‘score’:100},
index=[1]) # 自定义索引为:1 ,这里也可以不设置index
print(new)
print("-------在原数据框df1最后一行新增一行,用append方法------------")
df1=df1.append(new,ignore_index=True) #
pandas增加行、列,并使用函数
table=pd.read_excel(r’C:\Users\Administrator\Desktop\sourses\vip_product.xls’)
table[‘各店占比’]=table[‘石斛’]/sum(table[‘石斛’]) #增加一列,值为每行/总数
def sum_x(x):
try:
sum(x)
return sum(x)
except:
return (‘总计’) #定义一个函数,如果是数字就求和,不是数字就返回“总计"两个字(常做表的人懂得)。
table.loc[table[‘办事处’].count()]=table.apply(sum_x) #对每列运行
apply方法传入dataframe多列进行函数操作
dataSet[‘星座’] = dataSet.apply(lambda x :date2Constellation(x[‘出生月份’],x[‘出生日’]),axis=1)
pandas教程:[15]移动复制删除列
增
删 drop pop
插 insert
字符串列的合并
在某列加上某一特定的字符串
含有数值列的合并
str.split()、str.extract()、str.replace ,str.cat()函数
apply方法传递参数
df = pd.read_excel(fileName)
df[‘TimeInterval’] = df.apply(getInterval_new ,
axis = 1, args = (‘ReceivedTime’,‘PublishedTime’)) #调用方式一
#下面的调用方式等价于上面的调用方式
df[‘TimeInterval’] = df.apply(getInterval_new ,
axis = 1, **{‘before’:‘ReceivedTime’,‘after’:‘PublishedTime’}) #调用方式二
#下面的调用方式等价于上面的调用方式
df[‘TimeInterval’] = df.apply(getInterval_new ,
axis = 1, before=‘ReceivedTime’,after=‘PublishedTime’) #调用方式三
单个参数
def plus(df,n):
df[‘c’] = (df[‘a’]+df[‘b’])
df[‘d’] = (df[‘a’]+df[‘b’]) * n
return df
list1 = [[1,3],[7,8],[4,5]]
df1 = pd.DataFrame(list1,columns=[‘a’,‘b’])
df1 = df1.apply(plus,axis=1,args=(2,))
print df1
多个参数
def plus(df,n,m):
df[‘c’] = (df[‘a’]+df[‘b’]) * m
df[‘d’] = (df[‘a’]+df[‘b’]) * n
return df
list1 = [[1,3],[7,8],[4,5]]
df1 = pd.DataFrame(list1,columns=[‘a’,‘b’])
df1 = df1.apply(plus,axis=1,args=(2,3,))
print df1
如果是传整个dataframe,apply引用时不用带参数。
def error_ab(a1a2):
return (a1a2['Overall']-a1a2['Random'])/a1a2['Overall']
a1a2['Rand.%error']=a1a2.apply(error_ab,axis=1)
lambda匿名函数
add = lambda x, y : x+y
add(1,2) # 结果为3
1 应用在函数式编程中
Python提供了很多函数式编程的特性,如:map、reduce、filter、sorted等这些函数都支持函数作为参数,lambda函数就可以应用在函数式编程中。
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
2、应用在闭包中
def get_y(a,b):
return lambda x:ax+b
y1 = get_y(1,1)
y1(1) # 结果为2
python大作战之*args和**kwargs的区别
1:*args的功能:------接收N个位置参数,转换成元组tuple形式
2:**kwargs的功能------接收N个关键字参数,转换成字典dict形式
>>> def test3(*args,**kwargs):
print(args)
print(kwargs)
>>> test3(1,2,3,age=19,sex='F')
(1, 2, 3)
{'age': 19, 'sex': 'F'}