1、数据框去除重复
data1 = data1.drop_duplicates()
2、数据框拼接(ignore_index=True,重新分配索引)
# 两种方式,concat、append皆可以
result3=pd.concat([result1,result2],ignore_index=True)
result3=result1.append(result2,ignore_index=True)
# 用法
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
axis:要粘在哪个轴上。默认0,粘贴行。
join:默认outer,合集;inner,交集。
ignore_index:布尔型,默认False。如果为Ture的话,会重新分配index从0...n-1。
keys:一个序列,默认None。建立等级索引,作为最外层的level。
levels:序列sequences构成的list,默认None。
3、数据框分组排序取每组内的前两个
data4.sort_values(['cert_no', 'value'], ascending=[1, 0], inplace=True)
grouped = data4.groupby(['cert_no']).head(2)
4、数据框分组计数,分组求和(以无索引的方式返回聚合数据)
data2 = data1.groupby(['cert_no', 'mix_types'], as_index=False).count()
data3 = data2.groupby(['cert_no'], as_index=False)['value'].sum()
5、数据框重命名
data2.columns = ['cert_no', 'mix_types', 'value']
6、数据框合并
data4 = pd.merge(data2, data3, on='cert_no', how='left')
# 用法
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
left: 一个dataframe对象
right: 另一个dataframe对象
how: 可以是'left', 'right', 'outer', 'inner'. 默认为inner。
on: 列名,两个dataframe都有的列。如果不传参数,
而且left_index和right_index也等于False,
则默认把两者交叉/共有的列作为链接键(join keys)。
可以是一个列名,也可以是包含多个列名的list。
left_on: 左边dataframe的列会用做keys。可以是列名,
或者与dataframe长度相同的矩阵array。
right_on: 右边同上。
left_index: 如果为Ture,用左侧dataframe的index作为
连接键。如果是多维索引,level数要跟右边相同才行。
right_index: 右边同上。
sort: 对合并后的数据框排序,以连接键。
suffixes: 一个tuple,包字符串后缀,用来加在重叠的列名后面。
默认是('_x','_y')。
copy: 默认Ture,复制数据。
indicator: 布尔型(True/FALSE),或是字符串。
如果为True,合并之后会增加一列叫做'_merge'。
是分类数据,用left_only, right_only, both来标记
来自左边,右边和两边的数据。
7、数据框选择指定的列
data1 = data.loc[:, ['order_no', 'mix_types', 'cert_no']]
8、数据框刷选 符合某一列内容包含部分的数据集isin
# game_no_repeated 是一个列表
k2 = k1[k1['game_no'].isin(game_no_repeated)]
9、数据框删除某一列
data3 = data3.drop('cell',axis=1)
10、数据框根据某一列的值去判断增加某一列
data['jc_plate_2'] = list(map(lambda x: "正" if x > 0 else "负" if x < 0 else "零", data['jc_plate']))
11、数据框按指定的顺序输出数据集
# 按指定列顺序输出
cols = ['app_id', 'user_id', 'login_name', 'cert_no', 'type', 'lable', 'value', 'record_date']
df = data7.ix[:, cols]
12、数据框输出txt
# 输出txt
df.to_csv('/home/admin/user_lable_dimension/brush/result/qb-%s.txt' % partition_date, index=False, sep='\t',header=None)
13、数据透视表
DataFrame.pivot(index=None, columns=None, values=None)[source]
index:字符串或对象,可选。列名,用来当新数据框index的列,可以是多个列名的list。
columns:字符串或对象。列名,当做新数据框的列。
values:字符串或对象,可选。列名,生成新数据框的值。
如果没有指定,则使用余下的所有列,会生成等级索引列。
import pandas as pd
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],'bar': ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6]})
print(df)
df2=df.pivot(index='foo', columns='bar', values='baz')
print(df2)
bar baz foo
0 A 1 one
1 B 2 one
2 C 3 one
3 A 4 two
4 B 5 two
5 C 6 two
bar A B C
foo
one 1 2 3
two 4 5 6
Process finished with exit code 0
14、针对某一列替换
fun=lambda x: x.split('_')[1]
dataframe['number']=dataframe['name'].apply(fun)
15、数据框索引转换为列
k1=pd.DataFrame(pd.value_counts(se1))
k1.reset_index(level=0, inplace=True)
16、字符串包含筛选
# 筛选含有M,Ksize 的列
data=data.loc[data['Size'].str.contains('M|k')]
# 针对某一列替换
def fun1(x):
if 'M' in x:
return x.split('M')[0]
else:
return float(x.split('k')[0])/1024
data['Size1']=list(map(fun1,list(data['Size'])))
17、数据框两列计算相似度
# 数据框两列计算相似度
phash_dataframe['similary']= phash_dataframe.apply(lambda row: phash_img_similarity(int(row['phash_list']), int(row['calc_phash'])), axis=1)
print(phash_dataframe)
18、数据框两列调用一个函数做计算赋值给新的变量
def samfile_count(x,y):
sam_count=samfile.count(contig='Chr1', start=x, stop=y)
return sam_count
columndf_exon['count']=columndf_exon.apply(lambda r: samfile_count(r['start'],r['end']),axis=1)
print(columndf_exon.head())
cols=['gene_name','count']
res_output=columndf_exon.loc[:,cols]