1.关于重复项的处理
taskId = data_merge['taskid']
#取出所有的重复项
duplicated_data= data_merge[taskId.isin(taskId[taskId.duplicated()])]
#去除所有的taskid相同的重复项,剩余的唯一值与等会取过成本中位数的重复项数据合并
unique_data = data_drop.drop_duplicates(subset=['taskid'],keep= False)
2.和vlookup相同的merge功能
#(使用line_id+line_code作为唯一字段进行数据拼接与匹配),需要显示出rD的全集与dD交集的部分
rdD_merge = pd.merge(rD,dD,on='line_code_line_id',how='left')#原来是空值line_id+line_code的仍然是空值;
3.合并所有字段都相同的两张表
#将表构成list,然后在作为concat的输入
frames = [unique_data,duplicated_last_data]
result = pd.concat(frames)
4.判断一个dataFrame的行列
print df.columns.size#列数 2
print df.iloc[:,0].size#行数 3
print df.ix[[0]].index.values[0]#索引值 0
print df.ix[[0]].values[0][0]#第一行第一列的值 11
print df.ix[[1]].values[0][1]#第二行第二列的值 121
5.合并两列作为唯一主键(注意使用apply函数,注意看文档中apply和applyMap的区别)
a['linecode_lineid_distance'] = a.apply(lambda x: x['linecode_lineid']+'_'+str(x['line_distance']), axis=1)
6.将list转换成dataFrame进行输出
#list转换成dataFrame进行输出
df = pd.DataFrame(permutation_last_result, columns=['code','num'])
7.series如何以dataFrame的方式进行拼接
假设row的数据类型是series,初始化一个dataFrame
df_empty = pd.DataFrame(columns=['dept_code','actual_payment','src_area_code','src_zone_code','dest_area_code',
'dest_zone_code','line_distance','pricing_manner_name','unit_price','src_dest'])
将row进行转换成dataframe并转置
df_empty = pd.DataFrame(row).T
再将每个转换好的row以dataFrame的方式进行拼接
df_distance = df_distance.append(df_empty, ignore_index=True)
8.
#取这些distance的中位数,注意在使用numpy的时候貌似只能对浮点型的数据进行处理,要转换数据类型
median_unit_pay = np.average(value['unit_price'].astype(float))
9.python读取文件夹内的数据
path_for_data = r'F:\线路处理\按趟计价-调用接口\深圳区域distance小于150的unit_price.csv'
path_for_unit_price = pd.read_csv(path_for_data,encoding='gb2312',engine='python')
10.查看当前文件有多少行
print('total lines: ' + str(input_df.shape[0]))
11.截取‘_’后的第一位的字符串
zone_price['src'] = zone_price['src_dest'].apply(lambda x:x.split('_')[0])
12.object类型转换成为float类型
median_unit_pay = np.average(value['unit_price'].astype(float))
13.返回浮点数的四舍五入值
print('All finished in ' + str(round((time2 - time1) / 60, 2)) + ' minutes')
14.对新的一行适用apply函数需要这样使用,注意axis=1按照行处理的添加
result['acrossDayNum'] = result.apply(lambda x: 0 if x['ifAcrossDayNum'] else 1, axis=1)
15.完成的进行时间格式的转换
#进行时间格式的转换
result['planStartNearTime'] = result.apply(lambda x:datetime1.strftime(pd.to_datetime(x['testPlanStartNearTime']),"%Y/%m/%d %H:%M:%S").replace('/','-')
,axis=1)
16.计算i和j的距离(当i>j和i<j时)
(i-j+n)%n
17.关于生成随机数并打乱顺序
def operation_sequence_list(self):
sequence_list = [i for i in range(10)]
random.shuffle(sequence_list)
return sequence_list
18. pandas多行合并成一行与一行拆分成多行
# 一行拆分多行
model_station_temp = model_station.drop('Operation', axis=1).join(
model_station['Operation'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Operation')).reset_index(drop=True)
# 多行合并一行
def ab(df):
return','.join(df.values)
df = df.groupby(['股票代码','股票简称'])['所属概念'].apply(ab)
df = df.reset_index()
19. python27的编码报错问题
# python27解决UnicodeDecodeError: 'ascii' codec can't decode byte问题
reload(sys)
sys.setdefaultencoding('utf8')