python处理数据20条:2

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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值