Python 数据分析:DataFrame ,增 / 删 / 改 / 查。听故事学知识点怎么这么容易?

1 增

1.1 增列

1.1.1 增 1 列

  直接上代码。

def dframe1():
    """
    增 1 列。
    会增 1 列,就会用循环增 n 列。
    参考抽列:
    三动作:df[] / df.loc[] / df.iloc[](不能应用于“增”)
    两参数:标签索引 / 位置索引
    两传参:切片 / 不切片
    还按这些来。
    解锁新动作:df.insert(位置, 列名, 新数据)
    """
    """
    使用 df[] 增加/改写 一列。
    如指定名称原本存在,就是改写,否则增加。
    """
    data = [[81, 72, 93], [64, 45, 36], [79, 78, 99]]
    df = pd.DataFrame(data=data, columns=["物理", "化学", "生物"], index=["张三", "李四", "王五"])
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    """
    """
    增“数学”列。
    注意数据对齐。
"""
    df["数学"] = [132, 101, 67]
    print(df)
    """
          物理  化学  生物  数学
    张三    81    72    93   132
    李四    64    45    36   101
    王五    79    78    99    67
    """
    """
    如指定列已存在,“增加”变成“改写”。
    以 df.loc[] 示范。
    """
    df.loc[:, "数学"] = [123, 110, 76]
    print(df)
    """
          物理  化学  生物  数学
    张三    81    72    93   123
    李四    64    45    36   110
    王五    79    78    99    76
    """
    """
    以 df.iloc[] 示范。
    """
    df.iloc[:, 3] = [132, 101, 67]
    print(df)
    """
          物理  化学  生物  数学
    张三    81    72    93   132
    李四    64    45    36   101
    王五    79    78    99    67
    """
    """
    df.iloc[] 可否直接在尾列后增加 1 列?
    """
    # ~ df.iloc[:, 4] = [88, 78, 98]
    # ~ print(df)
    """
    IndexError: iloc cannot enlarge its target object
    """
    """
    df.iloc[] 不能扩大目标对象。
    原 DataFrame 有 4 列,df.iloc[] 不能直接让其第 5 列怎样怎样,因为没有第 5 列。
    df[] 可以。
    以 df.loc[] 演示增加“语文”列。
    """
    df.loc[:, "语文"] = [88, 78, 98]
    print(df)
    """
          物理  化学  生物  数学  语文
    张三    81    72    93   132    88
    李四    64    45    36   101    78
    王五    79    78    99    67    98
    """
    """
    解锁新动作:df.insert(位置, 列名, 新数据)
    我想在“生物”前加 1 列“英语”
    """
    df.insert(2, "英语", [99, 109 ,119])
    print(df)
    """
          物理  化学  英语  生物  数学  语文
    张三    81    72    99    93   132    88
    李四    64    45   109    36   101    78
    王五    79    78   119    99    67    98
    """
# ~ dframe1()

1.1.2 增多列

def dframe2():
    """
    同时增好几列?
    测试:df[] / df.loc[] / df.insert()
    """
    """
    三动作:df[]
    两参数:位置索引 / 标签索引。仅测试“标签索引”,1 种
    两传参:切片 / 不切片(单参 / 不连续多参)。df[] 切片是留给行的,所以不切片。“单参”已测试,只测试“不连续多参”,1 种
    整体只测试 1 种:df[] / 标签索引 / 不连续多参
    不连续多参要以列表传递
    """
    data = [[81, 72, 93], [64, 45, 36], [79, 78, 99]]
    df = pd.DataFrame(data=data, columns=["物理", "化学", "生物"], index=["张三", "李四", "王五"])
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    """
    """
    尝试一口气增加两列
    df["数学"] = [123, 110, 76]
    df["语文"] = [88, 78, 98]
    """
    # ~ df[["数学", "语文"]] = [[123, 110, 76], [88, 78, 98]]
    # ~ print(df)
    """
    ValueError: Columns must be same length as key
    """
    """
    df[] 多列没问题,是右边的值不能用列表吗?
    此处只能用字典传参,且对数对齐。
    """
    new_columns = {"数学": [123, 110, 76], "语文": [88, 78, 98]}
    print(new_columns)
    # ~ df[["数学", "语文"]] = new_columns
    # ~ print(df)
    """
    IndexError: tuple index out of range
    """
    df[["数学", "语文"]] = pd.DataFrame(new_columns, index=df.index)
    print(df)
    """
          物理  化学  生物  数学  语文
    张三    81    72    93   123    88
    李四    64    45    36   110    78
    王五    79    78    99    76    98
    """
    """
    不光需要字典,还需要先将字典生成 DataFrame ,并与原数据格式对齐。
    """
    """
    三动作:df.loc[]
    不用重复写了吧,做法一样
    新动作:df.insert()
    不测试了,它的参数位置只能写 1 个,不能写列表
    """
    """
    此例本质:合并两 DataFrame 。
    再举多例。
    """
    """
    结构完全一致时
    """
    df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
    df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
    """
    方法1:运算符
    """
    result = df1 + df2
    print(result)
    """
       A   B
    0  6  10
    1  8  12
    """
    """
    方法2:add()函数
    """
    result = df1.add(df2)
    print(result)
    """
       A   B
    0  6  10
    1  8  12
    """
    """
    结构不一致时(行列不匹配)​
    """
    df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=[0, 1])
    df2 = pd.DataFrame({'B': [5, 6], 'C': [7, 8]}, index=[1, 2])
    print(df1)
    """
       A   B
    0  1  3
    1  2  4
    """
    print(df2)
    """
       B  C
    1  5  7
    2  6  8
    """
    """
    用 add() 的 fill_value 参数处理缺失值
    """
    result = df1.add(df2, fill_value=0)
    print(result)
    """
         A    B    C
    0  1.0  3.0  NaN
    1  2.0  9.0  7.0
    2  NaN  6.0  8.0
    """
    """
    先对齐索引,再相加。
    缺失的数据用 0 填充
        A     B          C
    0   1     3
    1   2(0)  4(5)       7
    2         6          8
    """
    """
    未匹配行/列用NaN填充。
    缺失位置补0后相加(2+0, 4+5)。
    """
    """
    该法亦适用增多行。
    只需上下两 DataFrame 对齐“列名”。
    比上述方法两 DataFrame 在行/列都有交叉还简单。
    df.add()主要用于 df 相加(有个“add”很明显了),可用来“广播”。
    增加行或列并不推荐用这个写法,推荐的是“concat()”,下边有详细介绍。
    增加多行还有个简便写法,df.append(df2),下边详细介绍。
    """
# ~ dframe2()

1.2 增行

1.2.1 增 1 行

  直接上代码。

def dframe3():
    """
    增 1 行。
    会增 1 行,就会用循环增 n 行。
    参考抽行:
    三动作:df[](不能用来增“行”) / df.loc[] / df.iloc[](不能用来增“行”)
    两参数:标签索引 / 位置索引
    两传参:切片 / 不切片
    还按这些来。
    """
    """
    使用 df[] 增加/改写 一行
    如指定名称原本存在,就是改写,否则增加
    """
    data = [[81, 72, 93], [64, 45, 36], [79, 78, 99]]
    df = pd.DataFrame(data=data, columns=["物理", "化学", "生物"], index=["张三", "李四", "王五"])
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    """
    """
    增加一行:赵六,物理32,化学78,生物23。
    注意数据对齐。
    """
    df["赵六":"赵六"] = [32, 78, 23]
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    """
    """
    没成功!也没报错。
    可抽行的时候,df["第一行":"第一行"] 类似切片明明可以,标签索引“包头包尾”。
    别抬杠,不行就是不行,换 df.loc[] 。
    """
    df.loc["赵六"] = [32, 78, 23]
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    赵六    32    78    23
    """
    """
    测试 df.loc[] 。
    """
    df.index = [0, 1, 2, 3]
    df.loc[4] = [10, 20, 30]
    print(df)
    """
       物理  化学  生物
    0    81    72    93
    1    64    45    36
    2    79    78    99
    3    32    78    23
    4    10    20    30
    """
    """
    注意只要是显式设置行索引,虽然 [0, 1, 2, 3] 长得很像位置索引,但仍然是标签索引。
    再试 df.iloc[] 。
    """
    # ~ df.iloc[5] = [123, 110, 76]
    # ~ print(df)
    """
    IndexError: iloc cannot enlarge its target object
    """
    """
    df.iloc[] 不能扩大目标对象。说人话,原 DataFrame 没有索引 5 。
    """
    df.loc["新行"] = [123, 110, 76]
    print(df)
    """
          物理  化学  生物
    0       81    72    93
    1       64    45    36
    2       79    78    99
    3       32    78    23
    4       10    20    30
    新行   123   110    76
    """
    """
    做此测试。
    """
    df1 = df[4:"新行"]
    print(df1)
    """
          物理  化学  生物
    4       10    20    30
    新行   123   110    76
    """
    """
    结果包含“新行”,把4和“新行”当成标签索引来取的!
    4 本来就是标签索引。
    但不推荐这样毫无规律地乱设置行索引。
    """
    df1 = df[0:2]
    print(df1)
    """
       物理  化学  生物
    0    81    72    93
    1    64    45    36
    """
    """
    2-0=2,0和2当成位置索引来取的!
    不推荐把标签索引设置成这样:你自己不觉得累吗?还容易混。
    """
# ~ dframe3()

1.2.2 增多行

  直接上代码。

def dframe4():
    """
    同时增多行?
    除上述提到两 DataFrame 相加思路(并不推荐),推荐(其实不推荐)简便写法:df.append(df2)。
    """
    data = [[81, 72, 93], [64, 45, 36], [79, 78, 99]]
    df = pd.DataFrame(data=data, columns=["物理", "化学", "生物"], index=["张三", "李四", "王五"])
    print(df)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    """
    data = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
    df2 = pd.DataFrame(data=data, columns=["物理", "化学", "生物"], index=["赵六", "钱七", "孙八"])
    # ~ df = df.append(df2)
    # ~ print(df)
    """
    AttributeError: 'DataFrame' object has no attribute 'append'
    """
    """
    此法出现在 N 多书中,也很好写,但为何报错?
    在较新版本 Pandas(≥1.4.0)中,append() 方法已被弃用。
    append() 每次调用会创建全新的 DataFrame 对象,内存效率低下(时间复杂度 O(n²))。
    Pandas 官方推荐用 pd.concat() 替代。
    """
    """
    沿行方向(axis=0)合并,忽略原索引生成新索引。
    """
    combined = pd.concat([df, df2], axis=0, ignore_index=False)
    """
    DataFrame 继承了 numpy 中 axis 表示法,但在 DataFrame 中 axis 取值有限,不是 0 就是 1 。
    0 是第一维,行索引轴。
    1 是第二维,列索引轴。
    在 DataFrame 中常见误区:0 维就是行;1 维就是列。
    axis 的本质是“操作方向”而非“静态维度”!
    axis=0 确实与“行”有关,但它是“跨行”,是动作是方向,跨行的动作操作的是列向量!
    axis=1 确实与“列”有关,但它是“跨列”,是动作是方向,跨列的动作操作的是行向量!
    上边 pd.concat 操作的方向是 axis=0 ,跨行,所以添加的数据是让行更长了不是嘛!
    """
    print(combined)
    """
          物理  化学  生物
    张三    81    72    93
    李四    64    45    36
    王五    79    78    99
    赵六    10    20    30
    钱七    40    50    60
    孙八    70    80    90
    """
    """
    axis=0。
    如果理解不了,叨叨下边一句:
    在第一维方向扩展;扩展第一维;扩展行;让行更多。
    所以行数增多。
    """
    """
    测试 df.concat() 增多列。
    还是两步:1)生成新 df ;2)df.concat()。
    生成 df 可用列表也可用字典。
    测试用字典。
    """
    data = {"新课1": [11, 12, 13, 14, 15, 16], "新课2":[21, 22, 23, 24, 25, 26],"新课3":[31, 32, 33, 34, 35, 36]}
    df3 = pd.DataFrame(data=data, index=["张三", "李四", "王五", "赵六", "钱七", "孙八"])
    combined2 = pd.concat([combined, df3], axis=1)
    print(combined2)
    """
      物理  化学  生物  新课1  新课2  新课3
    张三    81    72    93     11     21     31
    李四    64    45    36     12     22     32
    王五    79    78    99     13     23     33
    赵六    10    20    30     14     24     34
    钱七    40    50    60     15     25     35
    孙八    70    80    90     16     26     36
    """
# ~ dframe4()

2 删

  DataFrame,删除操作,只用容易记住的方法。
  df.drop()。
  参数其实挺多,但没必要用这么多。

2.1 删列

2.1.1 删 1 列

  直接上代码。

def dframe5():
    """
    删 1 列
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    把 D 列删除
    """
    df1 = df.drop(columns="D")
    print(df1)
    """
        A   B   C
    0  11  21  31
    1  12  22  32
    2  13  23  33
    3  14  24  34
    """
    """
    当然也可以直接处理 df
    """
    df.drop(columns="D", inplace=True)
    """
    inplace = True 表示“就地生效”。
    """
    print(df)
    """
        A   B   C
    0  11  21  31
    1  12  22  32
    2  13  23  33
    3  14  24  34
    """
    """
    还可以指定维度(axis=1)删除等多种方法,用的时候查手册吧。
    记牢记准一个方法,比记很多种方法但哪一种都用着“二乎”强。
    """
# ~ dframe5()

2.1.2 删多列

  直接上代码。

def dframe6():
    """
    删 多 列
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    把 B/D 列删除。
    和删 1 列差不多,指定散列,传个列表参数即可。
    """
    df1 = df.drop(columns=["B", "D"])
    print(df1)
    """
        A   C
    0  11  31
    1  12  32
    2  13  33
    3  14  34
    """
    """
    当然也可以直接处理 df ,用上 inplace=True 。
    有个问题,我只知道我想删除第 1 列和第 4 列,但我不知道它们都叫啥名,怎么办?
    那就先取回列名啊,用 df.columns[]。
    """
    # ------取 1 个列名,就直接传想要处理的这个列的索引
    filter = df.columns[2]
    print(filter)
    """
    C
    """
    # ------取 多 个列名,就传多个索引,用列表表示
    # ------我们取第 1 列和第 4 列的列名,传参用列表
    filter = df.columns[[0, 3]]
    print(filter)
    """
    Index(['A', 'D'], dtype='object')
    """
    # ------删除多列,给 df.drop() 传个列表
    df1 = df.drop(columns=filter)
    print(df1)
    """
        B   C
    0  21  31
    1  22  32
    2  23  33
    3  24  34
    """
    """
    当然熟练工可以直接一步到位地写。
    """
    df1 = df.drop(columns=df.columns[[0, 3]])
    print(df1)
    """
        B   C
    0  21  31
    1  22  32
    2  23  33
    3  24  34
    """
    """
    还有不少方法。
    记住这个在实践中就足够用了,又不考研。
    考试的话当然有必要再看其它资料,搜索就有。
    """
# ~ dframe6()

2.2 删行

2.1.1 删 1 行

  直接上代码。

def dframe7():
    """
    删 1 行
    删 多 行
    """
    """
    和删列完全一致的思路,直接看代码吧。
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    df1 = df.drop(index=[1])
    print(df1)
    """
        A   B   C   D
    0  11  21  31  41
    2  13  23  33  43
    3  14  24  34  44
    """
    df1 = df.drop(index=[0, 3])
    print(df1)
    """
        A   B   C   D
    1  12  22  32  42
    2  13  23  33  43
    """
    """
    行索引不好看了?还是想用“0,1,2,3...”这种调调?
    """
    df1 = df.drop(index=[1])
    """
        A   B   C   D
    0  11  21  31  41
    2  13  23  33  43
    3  14  24  34  44
    """
    df1 = df1.reset_index(drop=True)
    # ------重置索引,丢弃旧索引(drop=True)
    print(df1)
    """
        A   B   C   D
    0  11  21  31  41
    1  13  23  33  43
    2  14  24  34  44
    """
    """
    当然也可以先取 df 的行数,再用 range 生成列表,再用 index=[] 赋值。
    行数:df.shape[0]。
    这样写的话,会显得很 low ,一看就很业余,没受过专业训练。
    """
    """
    想删除多行,那就传个列表参数。
    """
    df1 = df.drop(index=[0, 2])
    print(df1)
    """
        A   B   C   D
    1  12  22  32  42
    3  14  24  34  44
    """
# ~ dframe7()

2.1.2 删多行

  一不小心在 2.1.1 写完了。

2.1.3 按指定条件删除

  直接上代码。

def dframe8():
    """
    按指定条件删除。
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    删除 A 列小于 13、B 列大于 21 的数据。只能是按 行 删除了,对吧?
    所以我们要用到 index= 。
    """
    filter1 = df["A"] < 13
    filter2 = df.loc[:, "B"] > 21
    # ------有多种写法,对吧?
    filter = filter1 & filter2
    # ------以前多次强调不能用 and 还记得吧?
    """
    满足这样条件的,都是哪些行?
    """
    df1 = df[filter]
    print(df1)
    """
        A   B   C   D
    1  12  22  32  42
    """
    """
    只有 1 行,不大能说明问题,我们修改下条件,只要 B 列大于 10 即可。
    """
    df1 = df[(df["A"] < 13) & (df["B"] > 10)]
    print(df1)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    """
    """
    好了,有两条了,可以说明问题。
    怎么删除?
    想想基本语法:df1 = df.drop(index=[])。
    我们只要把符合条件的记录的行索引拿到就可以了,是吧?
    怎么拿行索引来?
    df.index,正好返回的是列表。
    齐活儿。
    """
    df1 = df.drop(df1.index)
    print(df1)
    """
        A   B   C   D
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    例子巧了,被删除的行索引正好是连续的0和1,可以再找找非连续型索引的记录,示例更通用。
    不写了,算法肯定没问题。
    """
# ~ dframe8()
def dframe9():
    """
    按指定条件删除。
    如果是标签索引呢?
    好,再试试。
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data, index=["张三", "李四", "王五", "赵六"])
    print(df)
    """
           A   B   C   D
    张三  11  21  31  41
    李四  12  22  32  42
    王五  13  23  33  43
    赵六  14  24  34  44
    """
    """
    删除 A 列小于 13、B 列大于 21 的数据。只能是按 行 删除了,对吧?
    所以我们要用到 index= 。
    """
    filter1 = df["A"] < 13
    filter2 = df.loc[:, "B"] > 21
    # ------有多种写法,对吧?
    filter = filter1 & filter2
    # ------以前多次强调不能用 and 还记得吧?
    """
    满足这样条件的,都是哪些行?
    """
    df1 = df[filter]
    print(df1)
    """
           A   B   C   D
    李四  12  22  32  42
    """
    """
    只有 1 行,不大能说明问题,我们修改下条件,只要 B 列大于 10 即可。
    """
    df1 = df[(df["A"] < 13) & (df["B"] > 10)]
    print(df1)
    """
           A   B   C   D
    张三  11  21  31  41
    李四  12  22  32  42
    """
    """
    好了,有两条了,可以说明问题。
    怎么删除?
    想想基本语法:df1 = df.drop(index=[])。
    我们只要把符合条件的记录的行索引拿到就可以了,是吧?
    怎么拿行索引来?
    df.index,正好返回的是列表。
    齐活儿。
    """
    df1 = df.drop(df1.index)
    print(df1)
    """
           A   B   C   D
    王五  13  23  33  43
    赵六  14  24  34  44
    """
# ~ dframe9()

3 改

3.1 改行/列标题(标签/索引名)

  直接上代码。

def dframe10():
    """
    改列标题
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    不叫“A/B/C/D”了,改叫“语文/数学/英语/生物”
    """
    df.columns=["语文", "数学", "英语", "生物"]
    print(df)
    """
       语文  数学  英语  生物
    0    11    21    31    41
    1    12    22    32    42
    2    13    23    33    43
    3    14    24    34    44
    """
    """
    改行标题
    """
    df.index=["张三", "李四", "王五", "赵六"]
    print(df)
    """
          语文  数学  英语  生物
    张三    11    21    31    41
    李四    12    22    32    42
    王五    13    23    33    43
    赵六    14    24    34    44
    """
    """
    还有其他方法。
    注意数据对齐!
    原来有五行六列的话,设置新行索引就只能是五条数据、列索引就只能是六条数据。
    """
# ~ dframe10()

3.2 改整列数据

  直接上代码。

def dframe11():
    """
    改整列数据。
    做法:1)先选中整列;2)赋值。
    选列的方法以前讨论过。
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    把“D”列成绩都加 10 分。
    “广播”。
    先选中“D”列,有以下几种方法。
    df["D"]
    df.loc[:, "D"]
    df.iloc[:, 4]
    做数据列表,每个成绩加 10 分,算好了再搞列表:[51, 52, 53, 54]
    """
    df["D"] = [51, 52, 53, 54]
    print(df)
    """
        A   B   C   D
    0  11  21  31  51
    1  12  22  32  52
    2  13  23  33  53
    3  14  24  34  54
    """
    """
    不专业。还需要自己算?
    “广播”:下通知,统一干事。
    """
    df["D"] += 10
    print(df)
    """
        A   B   C   D
    0  11  21  31  61
    1  12  22  32  62
    2  13  23  33  63
    3  14  24  34  64
    """
    """
    当然还有其他方法。
    """
# ~ dframe11()

3.3 改整行数据

  直接上代码。

def dframe12():
    """
    改整行数据。
    做法:1)先选中整行;2)赋值。
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    把“1”行成绩都加 10 分。
    先选中“1”行,有以下几种方法:
    df.loc[1]
    df.iloc[1]
    做数据列表,每个成绩都加 10 分,算好再搞列表:[22, 32, 42, 52]
    """
    df.loc[1] = [22, 32, 42, 52]
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  22  32  42  52
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    不专业。还用自己算?
    “广播”:下通知,统一干事。
    """
    df.loc[1] += 10
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  32  42  52  62
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    当然还有其他方法。
    """
# ~ dframe12()

3.4 改交点数据

  直接上代码。

def dframe13():
    """
    改交点数据。
    做法:1)先选中交点;2)赋值。
    取交点可以用:
    df.loc[, ]
    df.iloc[, ]
    df.iat[, ]
    """
    data = {"语文": [11, 12, 13, 14], "数学": [21, 22, 23, 24], "英语": [31, 32, 33, 34], "高考总分": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data, index=["张三", "李四", "王五", "那东"])
    print(df)
    """
          语文  数学  英语  高考总分
    张三    11    21    31        41
    李四    12    22    32        42
    王五    13    23    33        43
    那东    14    24    34        44
    """
    """
    接下来,我们很嚣张地把“那东”的“高考总分”改成 179 分。
    先选中“那东”这个玩意儿和“很严肃”的“高考总分”的交叉点,有以下几种方法:
    df.loc["那东", "高考总分"]
    df.iloc[3, 3]
    df.iat[3, 3]
    """
    df.loc["那东", "高考总分"] = 179
    print(df)
    """
          语文  数学  英语  高考总分
    张三    11    21    31        41
    李四    12    22    32        42
    王五    13    23    33        43
    那东    14    24    34       179
    """
    """
    这么简单吗?
    对,一般人改“高考总分”没那么容易,“那东”改起来就只是一条命令。
    改 449 也很容易:df.loc["那东", "高考总分"] = 449。
    路子很广,用别的方法也可以改:df.iloc[3, 3] = 759。
    路子广得很!!!
    """
    """
    当然还有其他方法。
    """
# ~ dframe13()

4 查

4.1 示例一

  直接上代码。

def dframe14():
    """
    查询:示例一
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    查询“A”列大于 12 的。
    """
    filter = df["A"] > 12
    df1 = df[filter]
    print(df1)
    """
        A   B   C   D
    2  13  23  33  43
    3  14  24  34  44
    """
    """
    “B”列等于23同时“D”列等于43。
    有点“萝卜岗”的意思了啊。
    """
    filter1 = df["B"] == 23
    filter2 = df["D"] == 43
    filter = filter1 & filter2
    df1 = df[filter]
    print(df1)
    """
        A   B   C   D
    2  13  23  33  43
    """
    """
    ​适用场景​:数值比较、组合条件过滤。
    ​注意​:多条件需用 &(与)、|(或)、~(非)连接,每个条件必须加括号。
    """
# ~ dframe14()

4.2 示例二

  直接上代码。

def dframe15():
    """
    查询:示例二
    """
    data = {"姓名": ["张三", "李四", "王五", "赵六"], "年龄": [21, 22, 23, 24]}
    df = pd.DataFrame(data=data)
    print(df)
    """
       姓名  年龄
    0  张三    21
    1  李四    22
    2  王五    23
    3  赵六    24
    """
    """
    查“姓名”为“张三”的“年龄”。
    即:求交叉点值。
    可以:df.loc["张三", "年龄"]。
    如“张三”为行索引值,直接用即可,可惜不是。
    可以把“张三”所在列“姓名”设置为行索引值,以后在“索引”专题再写。
    此处用个变通的方法:求“张三”对应的行索引。
    """
    filter = df["姓名"] == "张三"
    df1 =df[filter]
    print(df1)
    print(df1.index)
    """
       姓名  年龄
    0  张三    21
    Index([0], dtype='int64')
    """
    """
    找到了,索引为 0 。
    注意此返回值为列表。
    即:如“姓名”列有重名“张三”,多个带“张三”的记录都会被找出来。
    """
    df1 = df.loc[df1.index, "年龄"]
    print(df1)
    print(type(df1))
    print(df1[0])
    """
    0    21
    Name: 年龄, dtype: int64
    <class 'pandas.core.series.Series'>
    21
    """
    """
    测试重名“张三”。
    """
    df.loc[2] = ["张三", 23]
    print(df)
    """
       姓名  年龄
    0  张三    21
    1  李四    22
    2  张三    23
    3  赵六    24
    """
    filter = df["姓名"] == "张三"
    df1 = df[filter]
    print(df1)
    """
       姓名  年龄
    0  张三    21
    2  张三    23
    """
    print(df1.index)
    """
    Index([0, 2], dtype='int64')
    """
    df1 = df.loc[df1.index, "年龄"]
    print(df1)
    """
    0    21
    2    23
    Name: 年龄, dtype: int64
    """
    print(df1[0])
    print(df1[2])
    """
    21
    23
    """
    """
    用 df.reset_index() 可将索引搞成连续型。
    也可循环查找,方法多的是。
    """
# ~ dframe15()

4.3 示例三

  直接上代码。

def dframe16():
    """
    查询:示例三
    """
    data = {"姓名": ["张三", "李四", "王五", "赵六"], "年龄": [21, 22, 23, 24]}
    df = pd.DataFrame(data=data)
    print(df)
    """
       姓名  年龄
    0  张三    21
    1  李四    22
    2  王五    23
    3  赵六    24
    """
    """
    查询“姓名”为“张三”或“王五”的记录。
    也可归结为按条件抽提数据。
    抽提出来后当然可查询结果记录“年龄”。
    """
    filter = df["姓名"].isin(["张三", "王五"])
    df1 =df[filter]
    print(df1)
    print(df1.index)
    """
       姓名  年龄
    0  张三    21
    2  王五    23
    Index([0, 2], dtype='int64')
    """
    """
    排除“姓名”为“李四”的行。
    """
    filter = ~df["姓名"].isin(["李四"])
    df1 = df[filter]
    print(df1)
    """
       姓名  年龄
    0  张三    21
    2  王五    23
    3  赵六    24
    """
    df1 = df.loc[df1.index, "年龄"]
    print(df1)
    print(type(df1))
    print(df1[0])
    """
    0    21
    2    23
    3    24
    Name: 年龄, dtype: int64
    <class 'pandas.core.series.Series'>
    21
    """
# ~ dframe16()

先写这些,等有空再更新。
好像也没啥人看,也不着急。

4.4 示例四

  直接上代码。

def dframe17():
    """
    其他一些乱七八糟。
    查询方法多得是。
    """
    """
    ​SQL风格查询(query)​​
    用字符串表达式简化复杂条件:
    df.query('年龄 > 25 and 城市 != "广州"')
    df.query("姓名.str.contains('张')")
    优势​:语法直观,避免多层括号嵌套。
    """
    """
    ​字符串模糊查询(str.contains)​​
    支持正则表达式匹配文本:
    df[df['姓名'].str.contains('张|李')]
    df[df['备注'].str.contains('error', na=False)]
    ​参数扩展​:
    case=False(忽略大小写)、regex=True(启用正则)。
    """
    """
    ​范围查询(between)​​
    筛选数值或日期在区间内的行:
    df[df['年龄'].between(20, 30)]  # 年龄在20-30岁之间(含边界)
    ​适用场景​:价格区间、时间窗口筛选。
    """
    """
    ​索引与列快速筛选(filter)​​
    按行/列名特征批量筛选:
    df.filter(items=['姓名', '年龄'])  # 保留指定列
    df.filter(regex='^2023', axis=0)  # 保留行索引以“2023”开头的行
    ​参数​:items(固定列)、regex(正则)、like(模糊匹配)。
    """
    """
    ​高效单值存取(at / iat)​​
    at[]​:按标签取单个值(比 loc 更快):
    df.at[2, '姓名']  # 获取行索引为2、列名为“姓名”的单元格
    iat[]​:按位置取单个值(比 iloc 更快)
    df.iat[1, 0]  # 获取第2行第1列的值
    ​适用场景​:高频单值读写(如循环更新单元格)。
    """
    """
    测试:df.at[]
    """
    data = {"A": [11, 12, 13, 14], "B": [21, 22, 23, 24], "C": [31, 32, 33, 34], "D": [41, 42, 43, 44]}
    df = pd.DataFrame(data=data)
    print(df)
    """
        A   B   C   D
    0  11  21  31  41
    1  12  22  32  42
    2  13  23  33  43
    3  14  24  34  44
    """
    this = df.at[2, "D"]
    print(this)
    """
    43
    """
# ~ dframe17()

5 欢迎纠错

  欢迎纠错,随时更新。
  联系方式:评论、私信,或 企鹅 :1790042182 。

6 免费爬虫

https://affiliate.bazhuayu.com/M8lKUC

------

以下关于 Markdown 编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎ ↩︎

  2. 注脚的解释 ↩︎ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值