首页 > 其他分享 >饮冰三年-人工智能-Pandas-78-Pandas 新增、统计、排序

饮冰三年-人工智能-Pandas-78-Pandas 新增、统计、排序

时间:2022-09-03 15:46:28浏览次数:73  
标签:11 ... df score 2022 饮冰 total Pandas 78

上一篇:饮冰三年-人工智能-Pandas-77-Pandas 数据查询

 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备

一、新增数据列

1.1 直接赋值

# 1:直接赋值(将性别枚举值进行转换)
df.loc[:, "gender_name"] = df["gender"].map({1: "男", 0: "女"})
print(df)
View Code
      id  gender  ...         modify_time gender_name
0      7       0  ... 2022-02-11 17:16:54           女
1      8       0  ... 2022-02-11 17:16:54           女
2      9       0  ... 2022-02-11 17:16:54           女
3     10       1  ... 2022-02-11 17:16:54           男
4     11       1  ... 2022-02-11 17:16:54           男
结果

1.2 df.apply

# 2:通过df.applly (判断成绩的等级)
def get_socre_level(x):
    if x["score_total"] > 80:
        return "优秀"
    elif x["score_total"] > 60:
        return "及格"
    else:
        return "差"


# apply传递一个series,axis=0 表示按行,axis=1 表示按列
df.loc[:, "score_level"] = df.apply(get_socre_level, axis=1)
print(df.head())
# 产看各种类型的计数
print(df["score_level"].value_counts())
View Code
   id  gender  profession_id  ...         modify_time  gender_name score_level
0   7       0              1  ... 2022-02-11 17:16:54            女          及格
1   8       0              1  ... 2022-02-11 17:16:54            女           差
2   9       0              1  ... 2022-02-11 17:16:54            女           差
3  10       1              1  ... 2022-02-11 17:16:54            男          优秀
4  11       1              1  ... 2022-02-11 17:16:54            男          及格

[5 rows x 15 columns]
差     200
优秀    180
及格    100
Name: score_level, dtype: int64
结果

1.3 df.assign

# df.assign (同时添加多个新列,返回一个新对象,把成绩四分制、十分制)
result = df.assign(
    score_4=lambda x: x["score_total"] // 25,
    score_10=lambda x: x["score_total"] // 10,
)
print(result.head())
View Code
   id  gender  profession_id  ... score_level  score_4 score_10
0   7       0              1  ...          及格        3        7
1   8       0              1  ...           差        2        6
2   9       0              1  ...           差        2        5
3  10       1              1  ...          优秀        4       10
4  11       1              1  ...          及格        3        8
结果

1.4 按照条件选择分组,分别赋值

# 按照条件选择分组,分别赋值。
df["性别"] = ""
df.loc[df["gender"] == 0, "性别"] = "女"
df.loc[df["gender"] == 1, "性别"] = "男"
print(df.head())
print(df["性别"].value_counts())
View Code
   id  gender  profession_id  ... gender_name  score_level 性别
0   7       0              1  ...           女           及格  女
1   8       0              1  ...           女            差  女
2   9       0              1  ...           女            差  女
3  10       1              1  ...           男           优秀  男
4  11       1              1  ...           男           及格  男

[5 rows x 16 columns]
女    240
男    240
Name: 性别, dtype: int64
结果

二、统计函数

1.1 汇总类统计(count:总数、mean:平均数、std:标准差、min:最小值、(25%、50%、75%):分位数、max:最大值)

print(df.describe())
print(df["score_total"].mean())
View Code
               id      gender  ...  exams_version  score_total
count  480.000000  480.000000  ...          480.0    480.00000
mean   246.500000    0.500000  ...            1.0     67.37500
std    138.708327    0.500522  ...            0.0     28.06615
min      7.000000    0.000000  ...            1.0      5.00000
25%    126.750000    0.000000  ...            1.0     58.75000
50%    246.500000    0.500000  ...            1.0     73.50000
75%    366.250000    1.000000  ...            1.0     90.00000
max    486.000000    1.000000  ...            1.0    100.00000
结果

1.2 唯一去重,类似SQL中distinct

print(df["profession_name"].unique())
View Code
['经济与管理' '计算机' '文学与历史' '挖掘机']
结果

1.3 按值计数,类似SQL中Group By 后求count

print(df["profession_name"].value_counts())
View Code
经济与管理    120
计算机      120
文学与历史    120
挖掘机      120
结果

1.4 相关系数(corr) 和 协方差(cov)

  • 相关系数:衡量相似程度
    •  -1:两个变量变化时的反向相似度最大
    •  1:两个变量变化时的正向相似度最大
    • eg:两支股票是否同涨同跌?程度多大?正相关还是负相关?
  • 协方差:衡量同向、反向程度
    • 协方差为正:XY同向变化,值越大,同向程度越高
    • 协方差为负:XY反向变化,值越小,反向程度越高
    • eg:产品笑来那个波动跟哪些因素正相关、负相关 程度有多大

三、排序

Series的排序

series.sort_values(ascending=True, inplace=False)
参数说明:
  ascending:默认为True,升序排列
  inplace:是否修改原始的series,默认为False

sort_result = df["score_total"].sort_values()
View Code
186      5
114      5
210      5
378      5
42       5
      ... 
147    100
279    100
159    100
135    100
结果

DataFrame的排序

DataFrame.sort_values(by, ascending=True, inplace=False)
参数说明:
  by:字符串或List[字符串],表示单列排序或多列排序
  ascending:默认为True,升序排列
  inplace:是否修改原始的DataFrame,默认为False

d1 = df.sort_values(by="score_total", ascending=False)  # 单列排序
d2 = df.sort_values(by=["exams_date", "score_total"], ascending=[False, True])[["exams_date", "score_total"]]  # 多列排序
View Code
exams_date  score_total
402  2022-03-14            5
426  2022-03-14            5
450  2022-03-14            5
474  2022-03-14            5
404  2022-03-14            9
..          ...          ...
63   2022-02-11          100
69   2022-02-11          100
结果

四、一个常见异常分析

报错写法

condition = df["exams_date"].astype(str).str.startswith("2022-02")
df[condition]["score_total"] = 0

报错内容

D:/studty/djangoProject/DRF/api_service/pandas_/04_a_warning.py:8: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

报错原因分析:

df[condition]["score_total"] = 0 相当于
df.get(condition).set(score_total)
第一步骤的get发出了报警
链式操作:先get后set,get得到的dataframe可能是view也可能是copy
view:原对象
copy:复制出来的新对象

解决方法

# 方法一 将get、set 的两步操作改成set的一步操作
df.loc[condition, "score_total"] = 0
# 方法二 指明用的就是copy
df_month2 = df[condition].copy()
df_month2["score_total"] = 0
View Code

核心要诀:pandas 的 dataframe 的修改写操作,只允许在源dataframe上进行一步到位

标签:11,...,df,score,2022,饮冰,total,Pandas,78
From: https://www.cnblogs.com/YK2012/p/16395974.html

相关文章

  • 饮冰三年-人工智能-Pandas-79-Pandas 数据处理
    上一篇:饮冰三年-人工智能-Pandas-78-Pandas新增、统计、排序 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备一、对缺失值处理1.1检测1.2丢弃1.3......
  • CVE-2022-22978 Spring-Security 漏洞复现
    1说明在SpringSecurity中使用RegexRequestMatcher且规则中包含带点号的正则表达式时,攻击者可以通过构造恶意数据包绕过身份认证2环境搭建环境搭建地址可以参考如下的......
  • 信息学一本通 1178:成绩排序
    时间限制:1000ms      内存限制:65536KB提交数:48847   通过数:20113【题目描述】给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出......
  • NC17890 方格填色
    题目链接题目题目描述给一个mxn的方格,Applese想要给方格填上颜色,每个格子可以是黑色或者白色。他要求左右相邻两格不能同为白色且相邻两列不能全为黑色。求满足条件......
  • pandas的read_csv使用方法总结
    pandas在读取csv文件的时候是通过reaad_csv这个函数进行函数读取的f=open('file.csv',encoding='utf-8')cont=pd.read_csv(f) 其中比较重要的是,在读取csv文件的时......
  • [Google] LeetCode 778 Swim in Rising Water 优先队列
    Youaregivenannxnintegermatrixgridwhereeachvaluegrid[i][j]representstheelevationatthatpoint(i,j).Therainstartstofall.Attimet,thed......
  • Geopandas III (Kafka-Stream)
    GeopandasIII(Kafka-Stream)大家好,在本文中,我们将使用geopandas和matplotlib以及来自kafka的数据制作如下实时地图。文章中使用的代码和数据关联您可以通过访......
  • 利用pandas 判断csv文件最大长度
    1.安装pandaspipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple/--trusted-host=mirrors.aliyun.com/pypi/simple importpandasaspddf=pd.rea......
  • P1452/CF429D/P6247/P1429/P7883
    (P1452)给定\(n\)个点,求最远点对。\(n\leq5\times10^4\)。(CF429D)给定\(n\)个点,求最近点对。\(n\leq10^5\)。(P6247)给定\(n\)个点,求最近点对和最远点对。\(n\le......
  • leetcode278二分变形
    longlongfirstBadVersion(intn){longlongl=1;longlongr=n;longlongmid=1;//执行完之后l=r即为答案while(l<r){......