学习 使用pandas库 DataFrame 使用

学习 使用pandas库 DataFrame 使用_第1张图片

1 、 数据排序  sort_values()函数

     by:要排序的名称或名称列表, 

     sorted_df = df.sort_values(by='Age',ascending=False)  由大到小排序;

     sorted_df = df.sort_values(by='Age')  由小到大排序;

# 创建一个示例数据帧
data = {'Name': ['Tom', 'Nick', 'John', 'Amy'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)

# 按照Age列进行排序
sorted_df = df.sort_values(by='Age')
sorted_df.to_csv('test1.csv')
print(sorted_df)

学习 使用pandas库 DataFrame 使用_第2张图片

2 把字典,列表,迭代器 数据写入csv文件,to_csv() 函数

   方式1:

        lis_offer, lis_revenue = self.get_offer_revenue()
        data = {'offerid': lis_offer,
                'revenue': lis_revenue
                }
        result = pd.DataFrame(data)
        result.to_csv(data_path + start_time + "offer_revenue.csv")

  方式2:

        lis_offer, lis_revenue = self.get_offer_revenue()

        x_offer = np.array(lis_offer).reshape(-1, 1)
        x_revenue = np.array(lis_revenue).reshape(-1, 1)
        result = np.concatenate((x_offer, x_revenue), axis=1)
        result = pd.DataFrame(result, columns=['offerid', 'revenue'])
        result.to_csv(data_path + start_time + "offer_revenue.csv")
    def read4(self):
        active_score_lit = []
        li = ['90-100.tsv']
        for i in li:
            with open(i, mode='r+', encoding='utf-8') as file:
                for i in file.readlines():
                    aa = json.loads(i)
                    active_score_lit.append(aa)
        data = pd.DataFrame(active_score_lit)

                                             access_cat  ... conv_score
0      {"IAB9-5":7.32514399521715,"IAB9-30":7.3255896...  ...        NaN
1      {"IAB9-30":1.2948738821508443,"IAB1":1.2948738...  ...        NaN
2      {"IAB9-5":6.751567110240471,"IAB9-30":7.859169...  ...        NaN
3                                                    NaN  ...  2013.6735
4      {"IAB1":17.93415291298408,"IAB5":3.91909391671...  ...        NaN

方式3:

    

class GetOfferid():

    def get_numpage(self):
        '''
          通过请求 task任务接口 num:
        :return:
          输出  迭代器:
          offerid, strategy, country, sendSuccessCount, deviceCount
        '''

        for page in range(1, 15+1):
            url1 = host + "api/admin/v3/task/page?pageNum="+str(page)+"&pageSize=10"
            res = (requests.get(url=url1, headers=header, verify=False).json())['result']['records']
            time.sleep(1)
            for result in res:
                yield result['offerId'],result['strategy'],result['country'],result['sendSuccessCount'],result['deviceCount']

    def write_csv(self):
   
        lis_deviceCount = self.get_numpage()
        #  迭代器    generator     for i in lis_deviceCount:    遍历结果: ('9702', 'vba', 'IN', 155917, 48412574)
        result = pd.DataFrame(lis_deviceCount, columns=['offerid', 'strategy', 'country', 'sendSuccessCount', 'deviceCount'])
        result.to_csv(filename)

方式3:  已存在表格中写入一列数据:

  

        df = pd.read_csv(filename)
        df['expect_cvr'] = self.get_expect_cvr()
        df.to_csv(filename, index=False, encoding="utf_8_sig")

学习 使用pandas库 DataFrame 使用_第3张图片

方式4:  已存在表格中写入几行数据:

               原数据:

              学习 使用pandas库 DataFrame 使用_第4张图片

               追加写入   result.to_csv(filename, mode='a'),      加上mode='a',便可以追加写入数据;

              

学习 使用pandas库 DataFrame 使用_第5张图片

              追加写入  header=False,  不写出列名;

               result.to_csv(filename, mode='a', header=False)

学习 使用pandas库 DataFrame 使用_第6张图片

3  查询 内容

   3-0 查询单行数据【索引】,遍历所有行的数据

     

# 创建一个示例数据帧
data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
print(df[2:3])
print("``````````````````````")
for rr in df.values:
    print(rr)


Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
   Name  Age    City
2  John   35  London
``````````````````````
['Tom' 25 'New York']
['Nick' 29 'Paris']
['John' 35 'London']
['Nick' 21 'Berlin']

   3-1根据内容查询出对应的索引:  np.flatnonzero(df['Name'] == 'Nick')

data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
d = np.flatnonzero(df['Name'] == 'Nick')
print(d)


   Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
[1 3]

   3-2根据内容查询出对应的行的内容:  df.loc[df['Name'] == 'Nick']

data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
f = df.loc[df['Name'] == 'Nick']
print(f)


Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
   Name  Age    City
1  Nick   29   Paris
3  Nick   21  Berlin

DataFrame   增删改

2.3.1  行的操作

    1.1  添加行 

          pd._append(new_series, ignore_index =True)             ignore_index =True忽略标签意识

          返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817],
   'click':[1663,18492024,6379911],
}

pd2 = pd.DataFrame(lis_dic2)
new_series = pd.Series([999,1000],index=['offerId','click'])
pd3 = pd2._append(new_series, ignore_index =True)

    1.2  修改行

         pd.loc[行标签] = [列标签内容,列标签内容]     x 表示要修改的行标签,填写所有内容不用添加标签

        pd.locx[行位置] = [列位置内容,列位置内容,]    x 表示要修改的行标签,填写所有内容不用添加标签

        

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}

pd2 = pd.DataFrame(lis_dic2)
pd2.loc[2] = [1819,181918]

    1.3  删除行

       pd.drop([x]),   X表示要删除的行号,可以是多行,删除返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 = pd2.drop([2])

2.3.2  列的操作

     1.1  新增/修改 列

          方式1: df['列标签'] = 新列

          方式2:  pd.loc[:,'列标签'] =新列   

         如果DataFrame 不存在这一列,则新增一列; 如果DataFrame存在这一列则修改值;

new_result = DataFrame(result,columns=['sourceManager','sex','tel'])   #  新增一个列
new_result['tel'] = ['15829041959','15829041969','15829041979','15829041989']   新增这一列赋值;

    1.2  删除列

           pd.drop([x],axis=1),     X表示要删除的列,删除返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd2.loc[:,'sourceManager'] = ['ber','amie','terch','lisi']
pd3 = pd2.drop(['click'],axis=1)

DataFrame   数据查询

2.4.1         df.nlargest(n,columns)          按照columns 指定的列进行降序排序,并取前N行数据;

2.4.2         df.nsmallest(n,columns)       按照columns 指定的列进行升序排序,并取前N行数据;

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 = pd2.nsmallest(2,'click')

2.4.3   按条件查询:

          方式1: pd3 =pd2.loc[ 查询条件 ]

          方式2: pd2.query(查询条件)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 =pd2.loc[(pd2['click'] >1500)& (pd2['click'] < 6379912)]
pd4 = pd2.query('click > 1500 & click< 6379912')

2.4.4   分组聚合

     方式1:pd2.groupby(列标签,···). 列标签 . 聚合函数()

    按指定列分组,并对分组数据的相应列进行相应的聚合操作;

     

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
#  安装sex 字段分组, 求 ‘click’字段平均值
pd4 = pd2.groupby('sex').click.mean()

     方式2:pd2.groupby(列标签,···).agg({'列标签':'聚合函数()',······})

     按指定列分组,并对分组数据的相应列进行相应的聚合操作

   

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# #  安装sex 字段分组, 求 'offerId'的个数 和 ‘click’字段平均值
pd3 = pd2.groupby('sex').agg({'offerId':'count','click':'mean'})

2.5 排序

2.5.1   将DataFrame 按照指定列的数据进行排序;ascending=False,降序,True,升序;

            pd2.sort_values(by='列标签',ascending=False)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# 排序
pd3 = pd2.sort_values('click',ascending=False)

2.5.2  将DataFrame 按照行标签进行排序;ascending=False,降序,True,升序;

           pd2.sort_index(ascending=True)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# 排序
pd4 = pd2.sort_index(ascending=True)

你可能感兴趣的:(数据分析,pandas)