分享一个600块钱的python私活单,金融excel数据清洗(代码片段)

程序媛秃秃 程序媛秃秃     2022-12-04     219

关键词:

分享一个今年一月份接的一个价值600元的Python数据清洗的金融数据私单,细节确实是接单以来最为复杂的一个案例。废话不多说,给大家分享下整个案例的需求和实现过程。

【业务需求】

首先是客户提供给我11个表格,这些表格的数据大体相似,但是具体细节每个表格都不一样,因此在具体处理时,需要挨个验证如何实现目标。

最终输出表格样式:

所有的原始数据表格经过处理,都要产出相同的三个表格,格式如下:

表1:

表2:

表3:

【代码实现分析】

结果表分析

对于最终输出结果表1,2因为字段固定,因此我的策略就是这两个表格只要在原始数据中提取对应的数据即可,而表3因为数据时灵活多样的,但是它们的共同规律时资产编码均已1103开头,且《单位成本》列不能为0或者空,因此可以通过这两个条件进行定位。

原始数据表分析

以输入1原始数据表为例,表1,2中的汇总数据主要在《科目代码》这列里面,而表3的具体证券名称和金额在《科目名称》和《市值》《市值占比》等数据列

【代码实现】

我将所有需要用的数据路径放在了第一个代码块:

#文件路径
final_form = Path(r'D:\\Working\\私活\\数据清洗\\21-12-30表格清洗需求\\穿透管理输出表v3终版.xlsx')
folder_path =  Path(r'D:\\Working\\私活\\数据清洗\\21-12-30表格清洗需求\\输入结果')
qiong_form = Path(r'D:\\Working\\私活\\数据清洗\\基金穷举v4.xlsx')

由于结果表格式固定,我将它们全部提取出来,并做了相应的预处理,表1,表2保留需要的字段,不需要的数据项全部设置为空值NaN,表3基本只能保留表头:

# 提前读取输出结果的三个表,用于填充数据
df_final1 = pd.read_excel(final_form,header=[0,1]).iloc[:19,:6]
df_final2 = pd.read_excel(final_form,header=[22,23]).iloc[:16,:]
df_final3 = pd.read_excel(final_form,header=[41,42])

然后读取原始数据表,通过pathlib读取文件夹路径下的所有excel表格,然后根据数据开始的行、列将每个原始数据表格限定为一个dataframe对象

#读取各表数据
file_list = folder_path.glob('输入*.xls')
pathlist = list(file_list)
df1 = pd.read_excel(pathlist[2],header=4).iloc[1:,:]
df2 = pd.read_excel(pathlist[3],header=4).iloc[2:,:]
df3 = pd.read_excel(pathlist[4],header=1)
df4 = pd.read_excel(pathlist[5],header=3)
df4 = df4.drop(index=[df4.shape[0]-1,df4.shape[0]-2])
df5 = pd.read_excel(pathlist[6],header=4).iloc[2:,:]
df6 = pd.read_excel(pathlist[7],header=4).iloc[2:,:]
df7 = pd.read_excel(pathlist[8],header=3)
df7 = df7.drop(index=df7.shape[0]-1)
df9 = pd.read_excel(pathlist[9],header=3)
df10 = pd.read_excel(pathlist[0],header=3).iloc[1:,:]
df11 = pd.read_excel(pathlist[1],header=3).iloc[1:,:]

接下来就是根据11个表的共同特征生成4个相同的数据清洗方法,用于处理结果表1,2:

清洗方法1:

def data_wash1(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP,s_value):
    l = []
    y = []
    j = []
    q = []
    z = []
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        if i<5:
            list1 = df2[capital1].tolist()
            if len(list1)==0:
                list1.append(np.nan)
            list2 = df2[capitalP].tolist()
            if len(list2)==0:
                list2.append(np.nan)
            list3 = df2[value1].tolist()
            if len(list3)==0:
                list3.append(np.nan)
            list4 = df2[valueP].tolist()
            if len(list4)==0:
                list4.append(np.nan)
            l.append(list1[0])
            y.append(list2[0])
            j.append(list3[0])
            q.append(list4[0])
        if i >=5:
            list5 = df2[s_value].tolist()
            if len(list5)==0:
                list5.append(np.nan)
            z.append(list5[0])
    return l,y,j,q,z 

清洗方法2:

def data_wash2(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP):
    l = []
    y = []
    j = []
    q = []
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        list1 = df2[capital1].tolist()
        if len(list1)==0:
            list1.append(np.nan)
        list2 = df2[capitalP].tolist()
        if len(list2)==0:
            list2.append(np.nan)
        list3 = df2[value1].tolist()
        if len(list3)==0:
            list3.append(np.nan)
        list4 = df2[valueP].tolist()
        if len(list4)==0:
            list4.append(np.nan)
        l.append(list1[0])
        y.append(list2[0])
        j.append(list3[0])
        q.append(list4[0])
    return l,y,j,q

清洗方法3:


def data_wash3(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP,s_value):
    l = []
    y = []
    j = []
    q = []
    z = []
    df_form[ori_col] = df_form[ori_col].str.replace(':','')
    for i in range(df_final.shape[0]): 
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        if i<5:
            list1 = df2[capital1].tolist()
            if len(list1)==0:
                list1.append(np.nan)
            if capitalP.find('%')!=-1:
                list2 = (df2[capitalP]*0.01).tolist()
                if len(list2)==0:
                    list2.append(np.nan)
            else:
                list2 = df2[capitalP].tolist()
                if len(list2)==0:
                    list2.append(np.nan)
            list3 = df2[value1].tolist()
            if len(list3)==0:
                list3.append(np.nan)
            if valueP.find('%')!=-1:
                list4 = (df2[valueP]*0.01).tolist()
                if len(list4)==0:
                    list4.append(np.nan)
            else:
                list4 = df2[valueP].tolist()
                if len(list4)==0:
                    list4.append(np.nan)
            l.append(list1[0])
            y.append(list2[0])
            j.append(list3[0])
            q.append(list4[0])
        if i >=5:
            list5 = df2[s_value].tolist()
            if len(list5)==0:
                list5.append(np.nan)
            z.append(list5[0])
    return l,y,j,q,z

清洗方法4:

def data_wash4(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP):
    l = []
    y = []
    j = []
    q = []
    df_form[ori_col] = df_form[ori_col].str.replace(':','')
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        list1 = df2[capital1].tolist()
        if len(list1)==0:
            list1.append(np.nan)
        if capitalP.find('%')!=-1:
                list2 = (df2[capitalP]*0.01).tolist()
                if len(list2)==0:
                    list2.append(np.nan)
        else:
            list2 = df2[capitalP].tolist()
            if len(list2)==0:
                list2.append(np.nan)
        list3 = df2[value1].tolist()
        if len(list3)==0:
            list3.append(np.nan)
        if valueP.find('%')!=-1:
                list4 = (df2[valueP]*0.01).tolist()
                if len(list4)==0:
                    list4.append(np.nan)
        else:
            list4 = df2[valueP].tolist()
            if len(list4)==0:
                list4.append(np.nan)
        l.append(list1[0])
        y.append(list2[0])
        j.append(list3[0])
        q.append(list4[0])
    return l,y,j,q

清洗方法主要使用的是list表,主要是新改版的pandas似乎在数据提取方面不是很自如,比如通过df[‘列名’]=‘new_value’修改字段数据并不能达到预期,因此我改用列表来处理,虽然有点麻烦,但是结果还是比较准确的。

接下来就是依次处理每个表格的具体清洗函数,这里不做全部代码的呈现,给大家看表格1和表格2的处理函数吧:

《输入1》

def df_form1(df1,df_final1,df_final2,df_final3):
    df_deal= df1[df1['科目代码'].str.startswith('1103')&df1['单位成本'].notnull()]
    df_deal.reset_index(drop=True,inplace=True)
    df_final3.iloc[:,:]=np.nan
    df_final3.drop(index=range(df_deal.shape[0],df_final3.shape[0]),axis=0,inplace=True)
    df_final3['Asset_start_1']=df_deal['科目代码']
    df_final3['资产科目名称']=df_deal['科目名称']
    df_final3['资产成本']=df_deal['成本']
    df_final3['资产成本占比']=df_deal['成本占比']
    df_final3['市值']=df_deal['市值']
    df_final3['市值占比']=df_deal['市值占比']
    df_final3['数量']=df_deal['数量']
    df_final3['单位成本']=df_deal['单位成本']
    df_final3['行情']=df_deal['行情']
    df_final3.fillna('NA',inplace=True)
    df_final3 = df_final3.append(('Asset_start_1','Asset_start'):'Asset_End',('资产科目名称','Asset_name'):'NA',('资产成本','Asset_cost'):'NA',('资产成本占比','asset_cost_percent'):'NA',('市值','asset_NAV'):'NA',('市值占比','asset_NAV_percent'):'NA',('数量','asset_amount'):'NA',('单位成本','asset_unit_cost'):'NA',('行情','asset_unit_NAV'):'NA',('最终债务人','asset_issuer'):'NA',('资产类型','asset_type'):'NA',('资产代码','asset_code'):'NA',ignore_index=True)
    #读取穷举表对应1表,并修改为结果表项目名称
    qiong_std1 = pd.read_excel(qiong_form,usecols='A:B',header=2).iloc[:16,:]
    qiong_std2 = pd.read_excel(qiong_form,usecols='A:B',header=19)
    qiong_std2 = qiong_std2.reset_index()
    df_qiong1 = pd.read_excel(qiong_form,usecols='D:E',header=2).iloc[:16,:]
    df_qiong2 = pd.read_excel(qiong_form,usecols='D:E',header=19)
    df_qiong2 = df_qiong2.reset_index()
    df_qiong2.rename('(二)基金信息.1':"科目代码",inplace=True,axis=1)
    # 处理科目名称
    for i in range(1,df1.shape[0]):
        if df1.loc[i,'科目名称'] in list(df_qiong1['科目名称.1']):
            index1 = list(df_qiong1['科目名称.1']).index(df1.loc[i,'科目名称'])
            df1.loc[i,'科目名称'] = list(qiong_std1['科目名称'])[index1]
    #处理科目代码
    df_qiong2.dropna(inplace=True)
    for i in range(1,df1.shape[0]):
        if df1.loc[i,'科目代码'] in list(df_qiong2['科目代码']):
            index1 = list(df_qiong2['科目代码']).index(df1.loc[i,'科目代码'])
            df1.loc[i,'科目代码'] = list(qiong_std2['Unnamed: 1'])[index1]
    #处理表1
    df_final1.loc[:4,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[0]
    df_final1.loc[:4,('基金成本占比','fund_cost_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[1]
    df_final1.loc[:4,('基金市值','fund_NAV')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[2]
    df_final1.loc[:4,('基金市值占比','fund_NAV_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[3]
    df_final1.loc[5:,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[4]
    df_final1.loc[5:,('基金成本占比','fund_cost_percent')]='NA'
    df_final1.loc[5:,('基金市值','fund_NAV')]='NA'
    df_final1.loc[5:,('基金市值占比','fund_NAV_percent')]='NA'
    df_final1.fillna('NA',inplace=True)
    #处理表2
    df_final2['账本成本'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比',)[0]
    df_final2['账本成本占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[1]
    df_final2['账本市值'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[2]
    df_final2['账本市值占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[3]
    df_final2.iloc[:,6:12] = np.nan
    df_final2.fillna('NA',inplace=True)
    #输出
    app = xw.App(visible=False,add_book=False)
    wb = app.books.add()
    wb.sheets[0].range('A1').value = df_final1
    wb.sheets[0].range(f'Adf_final1.shape[0]+4').value = df_final2
    wb.sheets[0].range(f'Adf_final1.shape[0]+4+df_final2.shape[0]+3').value = df_final3
    wb.sheets[0].range('A:A').delete()
    wb.sheets[0].range('A1').expand('table').autofit()
    wb.save('res_form1.xlsx')
    wb.close()
    app.quit()

主要是需要调整各个字段的具体设置,比如有%的字段,你需要将该字段的数值乘以0.01才能是最终结果。

《输入2》:

def df_form2(df2,df_final1,df_final2,df_final3):
    #生成表3
    df_deal= df2[df2['科目代码'].str.startswith('1103')&df2['单位成本'].notnull()]
    df_deal.reset_index(drop=True,inplace=True)
    df_final3.iloc[:,:]=np.nan
    df_final3.drop(index=range(df_deal.shape[0],df_final3.shape[0]),axis=0,inplace=True)
    df_final3['Asset_start_1']=df_deal['科目代码']
    df_final3['资产科目名称']=df_deal['科目名称']
    df_final3['资产成本']=df_deal['成本']
    df_final3['资产成本占比']=df_deal['成本占比']
    df_final3['市值']=df_deal['市值']
    df_final3['市值占比']=df_deal['市值占比']
    df_final3['数量']=df_deal['数量']
    df_final3['单位成本']=df_deal['单位成本']
    df_final3['行情']=df_deal['行情']
    df_final3.fillna('NA',inplace=True)
    df_final3 = df_final3.append(('Asset_start_1','Asset_start'):'Asset_End',('资产科目名称','Asset_name'):'NA',('资产成本','Asset_cost'):'NA',('资产成本占比','asset_cost_percent'):'NA',('市值','asset_NAV'):'NA',('市值占比','asset_NAV_percent'):'NA',('数量','asset_amount'):'NA',('单位成本','asset_unit_cost'):'NA',('行情','asset_unit_NAV'):'NA',('最终债务人','asset_issuer'):'NA',('资产类型','asset_type'):'NA',('资产代码','asset_code'):'NA',ignore_index=True)
    #读取穷举表对应1表,并修改为结果表项目名称
    qiong_std1 = pd.read_excel(qiong_form,usecols='A:B',header=2).iloc[:16,:]
    qiong_std2 = pd.read_excel(qiong_form,usecols='A:B',header=19)
    qiong_std2 = qiong_std2.reset_index()
    df_qiong1 = pd.read_excel(qiong_form,usecols='G:H',header=2).iloc[:16,:]
    df_qiong2 = pd.read_excel(qiong_form,usecols='G:H',header=19)
    df_qiong2 = df_qiong2.reset_index()
    df_qiong2.rename('(二)基金信息.2':"科目代码",inplace=True,axis=1)
    # 处理科目名称
    for i in range(2,df2.shape[0]+2):
        if df2.loc[i,'科目名称'] in list(df_qiong1['科目名称.2']):
            index1 = list(df_qiong1['科目名称.2']).index(df2.loc[i,'科目名称'])
            df2.loc[i,'科目名称'] = list(qiong_std1['科目名称'])[index1]
    #处理科目代码
    df_qiong2.dropna(inplace=True)
    for i in range(2,df2.shape[0]+2):
        if df2.loc[i,'科目代码'] in list(df_qiong2['科目代码']):
            index1 = list(df_qiong2['科目代码']).index(df2.loc[i,'科目代码'])
            df2.loc[i,'科目代码'] = list(qiong_std2['Unnamed: 1'])[index1]
    #生成表1
    df_final1.loc[:4,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[0]
    df_final1.loc[:4,('基金成本占比','fund_cost_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[1]
    df_final1.loc[:4,('基金市值','fund_NAV')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[2]
    df_final1.loc[:4,('基金市值占比','fund_NAV_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[3]
    df_final1.loc[5:,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[4]
    df_final1.loc[5:,('基金成本占比','fund_cost_percent')]='NA'
    df_final1.loc[5:,('基金市值','fund_NAV')]='NA'
    df_final1.loc[5:,('基金市值占比','fund_NAV_percent')]='NA'
    df_final1.fillna('NA',inplace=True)
    #生成表2
    df_final2['账本成本'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[0]
    df_final2['账本成本占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[1]
    df_final2['账本市值'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[2]
    df_final2['账本市值占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[3]
    df_final2.iloc[:,6:12] = np.nan
    df_final2.fillna('NA',inplace=True)
    #写入文件
    app = xw.App(visible=False,add_book=False)
    wb = app.books.add()
    wb.sheets[0].range('A1').value = df_final1
    wb.sheets[0].range(f'Adf_final1.shape[0]+4').value = df_final2
    wb.sheets[0].range(f'Adf_final1.shape[0]+4+df_final2.shape[0]+3').value = df_final3
    wb.sheets[0].range('A:A').delete()
    wb.sheets[0].range('A1').expand('table').autofit()
    wb.save('res_form2.xlsx')
    wb.close()
    app.quit()

生成完所有表格的函数后,就可以调用对应的函数来生成对应表格的最终结果集了:

  df_form1(df1,df_final1,df_final2,df_final3)
# df_form2(df2,df_final1,df_final2,df_final3)
# df_form3(df3,df_final1,df_final2,df_final3)
# df_form4(df4,df_final1,df_final2,df_final3)
# df_form5(df5,df_final1,df_final2,df_final3)
# df_form6(df6,df_final1,df_final2,df_final3)
# df_form7(df7,df_final1,df_final2,df_final3)
# df_form9(df9,df_final1,df_final2,df_final3)
# df_form10(df10,df_final1,df_final2,df_final3)
# df_form11(df11,df_final1,df_final2,df_final3)

这里做了一个简单的注释,如果需要那个表格,只需要取消注释,运行该行代码就会生成对应列表的结果集了。

学习资源推荐

学习资源是学习质量和速度的保证,因此找到高质量的学习资源对我们来说也是非常重要的。以下列出的学习资源不分排名,都是好资源:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。


四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码【免费获取】。

python赚钱新姿势兼职私活月入8000+分享几个额外创收渠道(代码片段)

9012年了,现在干什么不赚钱,只要你能掌握生产工具,就能赚钱这里我介绍下我熟悉的python赚外快方式,想学的可以在文章末尾领取资料对了,不要再问我python难不难学,我之前做少儿编程的,四年级的小学生都能教会用python... 查看详情

发零食

...定给发零食吃HKD是土豪,所以他决定买零食的时候,从1块钱的开始买,然后买2块钱的,然后3块钱的,……,直至D块钱的。而且k块钱的零食买2^(k-1)个。但HKD从来不吃零食,所以他不知道他买的零食是否好吃。于是他把... 查看详情

晒晒我这两年的私活单,业余时间月入6k(代码片段)

...#xff0c;加起来也就10多万,只能算一般,我想把一些经验分享出来,下面是我曾经接过的一小部分私活单:再举个例子,比如:帮证券公司抓取一些财经新闻或者是舆情相关的数据,开发完了之后每个月要保证爬虫... 查看详情

自学编程,收藏好这7个免费网站,可省你上万块钱的学费

...上万块钱的学费!话不多说,直接上干货!第一个,W3school一个主打图文教程的网站,不管是前端开发的HTML、CSS,还是数据库,又或者是Python等编程语言的学习,应有尽有,关键还免费,我... 查看详情

python赚钱新姿势兼职私活月入8000+分享几个额外创收渠道(代码片段)

9012年了,现在干什么不赚钱,只要你能掌握生产工具,就能赚钱这里我介绍下我熟悉的python赚外快方式,想学的可以在文章末尾领取资料对了,不要再问我python难不难学,我之前做少儿编程的,四年级的小学生都能教会用python... 查看详情

2021最新问题:业余学python是如何挣钱的?

...#xff1a;接私活刚学会python那会,就有认识的朋友介绍做一个网站的私活,当时接单赚了4K,后又自己接过开发网站后台接口、做数据处理等事情,都赚了一些。接私活指的是利用自 查看详情

49块钱的智能音箱真的智能吗?—dingdong叮咚top京东智能音箱使用感受

自从科技圈去年挂起一阵VR的浪潮后,今年的风口好像开始转到了智能音箱领域,从2015年亚马逊发布了Echo之后,苹果的跟进,让国内的科技巨头们也都蠢蠢欲动,到了现在基本各家都推出了自己的音箱品牌,如小米的小爱同学... 查看详情

什么是程序的原子性

...1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:1.从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。2.在B的帐户里加1000块钱。如... 查看详情

放开后的第一波私活,赚得有点多,来说下接单心得(代码片段)

...年开辟副业兼职赚钱的人越来越多,我们似乎进入了一个全民副业的时代,毕竟, 查看详情

用python技术,写爬虫网上兼职接私活,两天赚一千,生活费不用愁了(代码片段)

先说个冷知识,现在业界对Python爬虫技术服务的需求量正在暴涨,当下早已供不应求,且有愈演愈烈的趋势。极不平衡的供需关系,使爬虫服务的价格变得极高。几乎所有的Python圈内人,都在利用爬虫技术接... 查看详情

淘宝几十块钱的co报警器拆解,就这么忽悠我的~

...课设都做的比这个有水平,也不知道怎么定价78块钱一个的……所以我又下单了一个国际大厂的CO报警器,不得不说是真贵,说不定下次拆解的就是它了哈哈~ 查看详情

2021最新问题:业余学python是如何挣钱的?

...?怎么挣钱?答案是可以的,有两点我都赚到钱的方法,接私活和自媒 查看详情

一.金融世界观

...本聚焦、分散风险而演化出的洞察、思维和工具。金融是一个时光机,能跨越时间、空间的限制,利用金融工具(债券、股票、金融衍生品)把 时间变现。  (一)世界观 比如,美国电影《大空头》,2008年美国... 查看详情

什么是原子性,什么是原子性操作?

...1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作: 1.从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。 2.在B的帐户里加1000... 查看详情

关于javascript对象深度克隆

都知道对一个js对象深度克隆的方法是采用递归,想问的是,下面两种方式的克隆有什么区别:1,赋值方式,比如vara=[];varb=a;2,递归克隆第一种严格来说不叫克隆。a和b指向同一个对象,修改b的时候其实a也被修改了第二种是把a... 查看详情

总结24个python接单赚钱的平台,兼职月入5000+(代码片段)

...f0c;提升工作效率。而且还能利用业余时间接点私活,一个月轻松收入过万不是问题,这样的生活他不香吗?今天就给大家盘点几个基本入门接私活的资源,让你轻松学python,实现经济独立。一、Python兼职种类&... 查看详情

每日分享(11),金融转计算机,自学计算机科学和python

...构,阅读了一篇中国金融科技企业观察报告,故分享给大家。1.当前全球迎来新一轮的科技革命和产业变革,各项新技术不断取得新突破,对全球经济、产业体系及人类生活已经产生广泛而深远的影响,金融科... 查看详情

年前最后一波私活,赚得有点多,来说下接单心得(代码片段)

...月了,记得买回家的票哦~每年春节前后,都会是Python兼职接单的小高潮,这段时间各个行业对爬虫类和数分类的需求会暴增!圈子里很多朋友双休都没闲着,两天赚上万的不在少数。最近在CSDN后台咨询技术变... 查看详情