当前位置: 首页 > news >正文

python -- series和 DataFrame增删改数据

学习目标

  • 知道df添加新列的操作

  • 知道insert函数插入列数据

  • 知道drop函数删除df的行或列数据

  • 知道drop_duplicates函数对df或series进行数据去重

  • 知道unique函数对series进行数据去重

  • 知道apply函数的使用方法

1 DataFrame添加列

注意:本文用到的数据集在文章顶部

1.1 直接赋值添加列数据

通过 df[列名]=新值df[列名]=series对象/list对象 添加新的一列, 新列添加到df的最后

  • 添加列名为 城市 的一列, 值都为北京

    import pandas as pd
    ​
    # 加载数据集
    df = pd.read_csv('../data/LJdata.csv')
    ​
    # 获取前5条数据并复制一份
    temp_df = df.head().copy()
    ​
    # 添加一列数据都是固定值
    temp_df['省份'] = '北京'
    print(temp_df)
    ​
    # 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数  城市
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26  北京
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33  北京
    2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34  北京
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30  北京
    4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30  北京

  • 添加列名为 区县 的一列, 值分别是 朝阳区、朝阳区、西城区、昌平区、朝阳区

    # 列表的数据数量必须和df的行数相等
    temp_df['区县'] = ['朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区']
    print(temp_df)
    ​
    # 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数  省份    区县
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26  北京  朝阳区
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33  北京  朝阳区
    2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34  北京  西城区
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30  北京  昌平区
    4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30  北京  朝阳区

  • 添加列名为 新价格 的一列, 值比原价格列的值多1000元

    # 新增数据为series对象
    # print(temp_df['价格'] + 1000)
    temp_df['新价格'] = temp_df['价格'] + 1000
    print(temp_df)
    ​
    # 输出结果如下区域          地址    户型  面积  价格  ...    更新时间 看房人数  省份    区县 新价格
    0    燕莎租房        新源街  2室1厅    50  5800  ...  2017.07.21       26  北京  朝阳区   6800
    1    望京租房      澳洲康都  2室1厅    79  7800  ...  2017.07.23       33  北京  朝阳区   8800
    2  广安门租房      远见名苑  2室1厅    86  8000  ...  2017.07.20       34  北京  西城区   9000
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  ...  2017.07.25       30  北京  昌平区   6300
    4  团结湖租房    团结湖北口  2室1厅    63  6400  ...  2017.07.26       30  北京  朝阳区   7400

1.2 insert函数添加列数据

通过 df.insert(loc=,column=,value=) 方法在指定位置添加列

loc: 指定列位置下标数字

column: 添加列的列名

value: 添加列的所有值, series对象、列表对象、常数等

  • 在区域列后添加列名为 城市 的一列, 值都为北京

    # 获取前5条数据
    new_df = df.head().copy()
    print(new_df)
    new_df.insert(loc=1, column='城市', value='北京')
    print(new_df)
    ​
    # 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域  城市          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房  北京        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房  北京      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  广安门租房  北京      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3  天通苑租房  北京  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  团结湖租房  北京    团结湖北口  2室1厅    63  6400    南  2017.07.26        30

  • 在城市列后添加列名为 区县 的一列, 值分别是 朝阳区、朝阳区、西城区、昌平区、朝阳区

    new_df.insert(loc=2, column='区县', value=['朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'])
    print(new_df)
    ​
    # 输出结果如下区域  城市    区县          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房  北京  朝阳区        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房  北京  朝阳区      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  广安门租房  北京  西城区      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3  天通苑租房  北京  昌平区  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  团结湖租房  北京  朝阳区    团结湖北口  2室1厅    63  6400    南  2017.07.26        30

  • 在价格列后添加列名为 新价格 的一列, 值比原价格列的值多1000元

    pd.set_option('display.max_columns', None)  # 展示所有列
    pd.set_option('display.width', None)  # 不换行显示
    new_df.insert(loc=7, column='新价格', value=new_df['价格'] + 1000)
    print(new_df)
    ​
    # 输出结果如下区域  城市    区县          地址    户型  面积  价格  新价格  朝向    更新时间  看房人数
    0    燕莎租房  北京  朝阳区        新源街  2室1厅    50  5800    6800    南  2017.07.21        26
    1    望京租房  北京  朝阳区      澳洲康都  2室1厅    79  7800    8800    东  2017.07.23        33
    2  广安门租房  北京  西城区      远见名苑  2室1厅    86  8000    9000    东  2017.07.20        34
    3  天通苑租房  北京  昌平区  天通苑北一区  2室1厅   103  5300    6300  东南  2017.07.25        30
    4  团结湖租房  北京  朝阳区    团结湖北口  2室1厅    63  6400    7400    南  2017.07.26        30

2 DataFrame删除行列

通过 df.drop(labels=, axis=, inplace=) 方法删除行列数据

labels: 行索引值或列名列表

axis: 删除行->0或index, 删除列->1或columns, 默认0

inplace: TrueFalse, 是否在原数据上删除, 默认False

# 删除一行数据, 原df上并没有删除
print(temp_df.drop(labels=[0]))
​
# 删除多行数据, 原df上删除
temp_df.drop(labels=[0, 2, 4], axis='index', inplace=True)
print(temp_df)
​
# 删除一列数据, 原df上并没有删除
print(temp_df.drop(labels=['新价格'], axis=1))
​
# 删除多列数据, 原df上删除
temp_df.drop(labels=['新价格', '区县', '省份'], axis='columns', inplace=True)
print(temp_df)
​
# 输出结果如下区域          地址    户型  面积  价格  ...    更新时间 看房人数  省份    区县 新价格
1    望京租房      澳洲康都  2室1厅    79  7800  ...  2017.07.23       33  北京  朝阳区   8800
2  广安门租房      远见名苑  2室1厅    86  8000  ...  2017.07.20       34  北京  西城区   9000
3  天通苑租房  天通苑北一区  2室1厅   103  5300  ...  2017.07.25       30  北京  昌平区   6300
4  团结湖租房    团结湖北口  2室1厅    63  6400  ...  2017.07.26       30  北京  朝阳区   7400
​
[4 rows x 11 columns]区域          地址    户型  面积  价格  ...    更新时间 看房人数  省份    区县 新价格
1    望京租房      澳洲康都  2室1厅    79  7800  ...  2017.07.23       33  北京  朝阳区   8800
3  天通苑租房  天通苑北一区  2室1厅   103  5300  ...  2017.07.25       30  北京  昌平区   6300
​
[2 rows x 11 columns]区域          地址    户型  面积  价格  朝向    更新时间  看房人数  省份    区县
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33  北京  朝阳区
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30  北京  昌平区区域          地址    户型  面积  价格  朝向    更新时间  看房人数
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30

3 Series或DataFrame数据去重

通过 <s/df>.drop_duplicates(subset=,keep=,inplace=) 方法对数据去重

subset: df的参数, 传入列名列表, 对指定列进行去重, 不写此参数默认对所有列进行去重

keep: 保留哪条重复数据, first->保留第一条, last->保留最后一条, False->都不保留, 默认first

inplace: TrueFalse, 是否在原数据上去重, 默认False

  • DataFrame数据去重 duplicates

    temp_df = df.head().copy()
    ​
    # 对df所有列去重, 当前df没有重复的行数据
    print(temp_df.drop_duplicates())
    # 根据指定列对df去重, 默认保留第一条数据
    # 第1行和第5行、第2行和第3行重复
    print(temp_df.drop_duplicates(subset=['户型', '朝向']))
    # 保留最后一条数据
    # print(temp_df.drop_duplicates(subset=['户型', '朝向'], keep='last'))
    # 重复数据都不保留
    # print(temp_df.drop_duplicates(subset=['户型', '朝向'], keep=False))
    ​
    # 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30

  • Series数据去重

    print('-------------去重之后返回Series对象--------------------')
    # 默认保留第一条数据
    print(temp_df['朝向'].drop_duplicates())
    # 保留最后一条数据
    print(temp_df['朝向'].drop_duplicates(keep='last'))
    # 重复数据都不保留
    print(temp_df['朝向'].drop_duplicates(keep=False))
    ​
    print('-------------去重之后返回数组--------------------')
    # series对象还可以使用unique函数去重, 返回ndarray数组
    print(temp_df['朝向'].unique())
    # nunique函数实现去重计数操作, 类似 count(distinct)
    print(temp_df['朝向'].nunique())
    ​
    # 输出结果如下
    0      南
    1      东
    3    东南
    Name: 朝向, dtype: object
    2      东
    3    东南
    4      南
    Name: 朝向, dtype: object
    3    东南
    Name: 朝向, dtype: object
    ['南' '东' '东南']
    3

4 Series或DataFrame数据修改

4.1 直接修改数据

通过 df[列名]=新值s[行索引]=新值 修改数据

# 获取前5条数据并复制一份
temp_df = df.head().copy()
​
# 获取价格列, 得到series对象, 复制一份数据
s1 = temp_df['价格'].copy()
print(s1)
​
# series修改数据
s1[0] = 7000
print(s1)
​
# dataframe修改数据, 列表数据数量要和行数相等
temp_df['价格'] = [6800, 8800, 9000, 6300, 6400]
print(temp_df)
​
# 输出结果如下
0    5800
1    7800
2    8000
3    5300
4    6400
Name: 价格, dtype: int64
0    7000
1    7800
2    8000
3    5300
4    6400
Name: 价格, dtype: int64区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  6800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  8800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  9000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  6300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30

4.2 replace函数替换数据

通过 <s/df>.replace(to_replace=, value=, inplace=) 方法替换数据

to_replace: 需要替换的数据

value: 替换后的数据

inplace: TrueFalse, 是否在原数据上替换, 默认False

# 获取前5条数据并复制一份
temp_df = df.head().copy()
​
# 替换series的数据
print(temp_df['价格'].replace(to_replace=5300, value=6000))
​
temp_df['朝向'].replace('东南', '西', inplace=True)
print(temp_df)
​
# 替换dataframe的数据
print(temp_df.replace(to_replace='2室1厅', value='3室2厅'))
​
# 输出结果如下
0    5800
1    7800
2    8000
3    6000
4    6400
Name: 价格, dtype: int64区域          地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000   东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300   西  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400   南  2017.07.26        30区域          地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房        新源街  3室2厅    50  5800   南  2017.07.21        26
1    望京租房      澳洲康都  3室2厅    79  7800   东  2017.07.23        33
2  广安门租房      远见名苑  3室2厅    86  8000   东  2017.07.20        34
3  天通苑租房  天通苑北一区  3室2厅   103  5300   西  2017.07.25        30
4  团结湖租房    团结湖北口  3室2厅    63  6400   南  2017.07.26        30

4.3执行自定义函数修改数据

有时需要我们对df或s对象中的数据做更加精细化的修改动作,并将修改操作封装成为一个自定义的函数;这时我们就可以利用<s/df>.apply(函数名)来调用我们自定义的函数

s或df对象可以借助apply函数执行自定义函数, 内置函数无法处理需求时就需要使用自定义函数来处理

4.3.1s.apply()函数遍历每一个值同时执行自定义函数
  • Series对象使用apply调用自定义的函数,返回新的Series对象

    # 加载数据集
    df = pd.read_csv('../data/LJdata.csv')
    # 获取前5条数据并复制一份
    temp_df = df.head().copy()
    ​
    ​
    # 自定义函数, 最少接收一个参数
    def func(x):# x此时是s对象中一个数据值:燕莎租房、望京租房print('x的值是->', x)# 本自定义函数返回的也是一个数据if x == '天通苑租房':return '昌平区'return x
    ​
    ​
    temp_df['区域'] = temp_df['区域'].apply(func)
    print(temp_df)
    ​
    # 输出结果如下
    x的值是-> 燕莎租房
    x的值是-> 望京租房
    x的值是-> 广安门租房
    x的值是-> 天通苑租房
    x的值是-> 团结湖租房区域          地址    户型  面积  价格  朝向    更新时间  看房人数
    0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
    1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3      昌平区  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30
  • Series对象使用apply调用自定义的函数,并向自定义函数中传入其他参数

    # 获取前5条数据
    temp_df = df.head().copy()
    ​
    ​
    # 自定义函数, 最少接收一个参数
    def func(x, arg1, arg2):# x此时是s对象中一个数据print('x的值是->', x)# 本自定义函数返回的也是一个数据if x == '天通苑租房':return arg1return arg2
    ​
    ​
    # args: 传入其他参数值, 元组类型
    temp_df['区域'] = temp_df['区域'].apply(func, args=('昌平区', '其他区'))
    ​
    # apply中其他参数名和自定义函数中其他形参名相同
    # temp_df['区域'] = temp_df['区域'].apply(func1, arg1='昌平区', arg2='其他区')
    print(temp_df)
    ​
    # 输出结果如下
    x的值是-> 燕莎租房
    x的值是-> 望京租房
    x的值是-> 广安门租房
    x的值是-> 天通苑租房
    x的值是-> 团结湖租房区域          地址    户型  面积  价格  朝向    更新时间  看房人数
    0  其他区        新源街  2室1厅    50  5800    南  2017.07.21        26
    1  其他区      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
    2  其他区      远见名苑  2室1厅    86  8000    东  2017.07.20        34
    3  昌平区  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
    4  其他区    团结湖北口  2室1厅    63  6400    南  2017.07.26        30

4.3.2 df.apply()函数遍历每一行/列同时执行自定义函数
# 获取前5条数据
temp_df = df.head().copy()
print(temp_df)
​
​
def func1(s, arg1):# 此时s参数就是df中的一列数据, s对象# print('s的值是->', s)# print('s的类型是->', type(s))# 本自定义函数也必须返回一列数据, s对象# print(s.__dict__)if s._name == '价格':return s + arg1else:return s
​
# 默认遍历df每列, axis=0
print(temp_df.apply(func1, args=(1000,), axis=0))
​
​
def func2(s, arg1):# 此时s参数就是df中的一行数据, s对象# print('s的值是->', s)# print('s的类型是->', type(s))# 本自定义函数也必须返回一列数据, s对象# print(s.__dict__)if s['区域'] == '天通苑租房':# 修改价格对应的值s['价格'] = s['价格'] + arg1return selse:return s
​
​
​
# 遍历df每行, axis=1
print(temp_df.apply(func2, arg1=1000, axis=1))
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  6800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  8800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  9000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  6300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  7400    南  2017.07.26        30区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  6300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30
4.3.3 df.applymap()函数遍历每一个值同时执行自定义函数
# 获取前5条数据
temp_df = df.head().copy()
print(temp_df)
​
​
# 自定义函数只能接收一个参数
def func(x):# 此时x参数就是df中的每个数据# print('x的值是->', x)# 本自定义函数也必须返回一个数据if x == '2室1厅':return '3室2厅'else:return x
​
​
print(temp_df.applymap(func))
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  3室2厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  3室2厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  3室2厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  3室2厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  3室2厅    63  6400    南  2017.07.26        30

总结

请对下列API 有印象、能找到、能理解、能看懂

  • df['列名'] = 标量或向量 修改或添加列

  • df.insert(列下标数字, 列名, 该列所有值) 指定位置添加列

  • <df/s>.drop([索引值1, 索引值2, ...]) 根据索引删除行数据

  • df.drop([列名1, 列名2, ...], axis=1) 根据列名删除列数据

  • <df/s>.drop_duplicates() df或s对象去除重复的行数据

  • s.unique() s对象去除重复的数据

  • <df/s>.replace('原数据', '新数据', inplace=True) 替换数据

    • df或series对象替换数据,返回的还是原来相同类型的对象,不会对原来的df造成修改

    • 如果加上inplace=True参数,则会修改原始df

  • apply函数

    • s.apply(自定义函数名, arg1=xx, ...) 对s对象中的每一个值,都执行自定义函数,且该自定义函数除了固定接收每一个值作为第一参数以外,还可以接收其他自定义参数

    • df.apply(自定义函数名, arg1=xx, ...) 对df对象中的每一列,都执行自定义函数,且该自定义函数除了固定接收列对象作为第一参数以外,还可以接收其他自定义参数

    • df.apply(自定义函数名, arg1=xx, ..., axis=1) 对df对象中的每一,都执行自定义函数,且该自定义函数除了固定接收行对象作为第一参数以外,还可以接收其他自定义参数

  • applymap函数

    • df.applymap(自定义函数名) 对df对象中的每个值, 都执行自定义函数, 且该自定义函数只能接收每个值作为参数, 不能接收其他自定义参数

相关文章:

python -- series和 DataFrame增删改数据

学习目标 知道df添加新列的操作 知道insert函数插入列数据 知道drop函数删除df的行或列数据 知道drop_duplicates函数对df或series进行数据去重 知道unique函数对series进行数据去重 知道apply函数的使用方法 1 DataFrame添加列 注意:本文用到的数据集在文章顶部 1.1 直…...

window.clearInterval(timer) 清除定时器

window.clearInterval(timer)是用来清除定时器的方法。在JavaScript中&#xff0c;使用定时器可以在指定的时间间隔执行一段代码。通常&#xff0c;使用setTimeout()方法可以在一定时间后执行一次代码&#xff0c;而使用setInterval()方法可以在每个时间间隔执行一次代码。 使…...

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…...

NLP--关键词

在去停用词后的文本中进行词频统计和关键词统计以及词云图显示&#xff0c;来进行文本的关键词提取&#xff0c;让人一目了然。 1.词频统计 统计文本中多次出现的词语&#xff0c;来寻找文章中的关键词&#xff0c;因为多次出现很可能就是关键内容。调用统计数量的Counter库和…...

Qt5学习笔记

一、基础知识 1、基本控件类型 水平弹簧与垂直弹簧的父类都是QSpaceItem。关于PushButton相关的控件类型&#xff1a; QPushButton&#xff1a;最基础的按钮类型。QToolButton&#xff1a;可以控制图片、文字任意组合的显示方式的按钮类型。QRadioButton&#xff1a;就像rad…...

数据结构与算法笔记:基础篇 - 散列表(下):为什么散列表和链表经常会一起使用?

概述 已经学习了这么多章节了&#xff0c;你有没有发现&#xff0c;两种数据结构&#xff0c;散列表和链表&#xff0c;经常会被放在一起使用。你还记得&#xff0c;前面的章节中都有哪些地方讲到散列表和链表的组合使用吗&#xff1f; 在链表那一节&#xff0c;我讲到如何用…...

读AI未来进行式笔记06自动驾驶技术

1. 跃层冲击 1.1. 每个社会其实都处于不同的楼层&#xff0c;往往处于更低楼层的社会&#xff0c;要承受来自更高楼层的社会发展带来的更大冲击 2. 驾驶 2.1. 开车时最关键的不是车&#xff0c;而是路 2.2. 人是比机器更脆弱的生命&am…...

SpringAOP 常见应用场景

文章目录 SpringAOP1 概念2 常见应用场景3 AOP的几种通知类型分别有什么常见的应用场景4 AOP实现 性能监控4.1 首先&#xff0c;定义一个切面类&#xff0c;用于实现性能监控逻辑&#xff1a;4.2 定义自定义注解4.3 注解修饰监控的方法 5 AOP实现 API调用统计5.1 定义切面类&am…...

html+css示例

HTML HTML&#xff08;超文本标记语言&#xff09;和CSS&#xff08;层叠样式表&#xff09;是构建和设计网页的两种主要技术。HTML用于创建网页的结构和内容&#xff0c;而CSS用于控制其外观和布局。 HTML基础 HTML使用标签来标记网页中的不同部分。每个标签通常有一个开始…...

Day51 动态规划part10+Day52 动态规划part11

LC121买卖股票的最佳时机&#xff08;未掌握&#xff09; 暴力&#xff1a;双层循环寻找最优间距&#xff0c;每一次都确定一个起点&#xff0c;遍历剩余节点当作终点 贪心&#xff1a;取最左最小值&#xff0c;不断遍历那么得到的差值最最大值就是最大利润。 动态规划 dp数组…...

Wireshark自定义Lua插件

背景&#xff1a; 常见的抓包工具有tcpdump和wireshark&#xff0c;二者可基于网卡进行抓包&#xff1a;tcpdump用于Linux环境抓包&#xff0c;而wireshark用于windows环境。抓包后需借助包分析工具对数据进行解析&#xff0c;将不可读的二进制数转换为可读的数据结构。 wires…...

商城项目【尚品汇】07分布式锁-2 Redisson篇

文章目录 1 Redisson功能介绍2 Redisson在Springboot中快速入门&#xff08;代码&#xff09;2.1 导入依赖2.2 Redisson配置2.3 将自定义锁setnx换成Redisson实现&#xff08;可重入锁&#xff09; 3 可重入锁原理3.1 自定义分布式锁setnx为什么不可以重入3.2 redisson为什么可…...

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator&#xff0c;它不仅仅是一个简单的图形编辑工具&#xff0c;更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中&#xff0c;用户可以通过各种精心设计的工具&#xff0c;轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…...

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院&#xff0c;隶属于中国船舶重工集团公司&#xff0c;是专门从事舰船研究、设计、开发的科学技术研究机构&#xff0c;是中国船舶重工集团公司的军品技术研究中心、科技开发中心&#xff1b;主要从事舰船武器装备发展战略研究…...

双网卡配置IP和路由总结

1.在网络适配器属性IPv4中设置默认网关&#xff08;记网关地址为A&#xff09;&#xff0c;将会在本地路由表中新增一条记录&#xff1a; 网络号子网掩码网关地址0.0.0.00.0.0.0A 2.如果有两个网卡&#xff08;假设一个连接内网&#xff0c;一个连接互联网&#xff09;&#…...

【纯血鸿蒙】——自适应布局如何实现?

界面级一多能力有 2 类&#xff1a; 自适应布局: 略微调整界面结构 响应式布局&#xff1a;比较大的界面调整 本文章先主要讲解自适应布局&#xff0c;响应式布局再后面文章再细讲。话不多说&#xff0c;开始了。 自适应布局 针对常见的开发场景&#xff0c;方舟开发框架提…...

Qt5学习笔记(一):Qt Widgets Application项目初探

笔者长期使用MFC开发Windows GUI软件。随着软件向Linux平台迁移的趋势越发明朗&#xff0c;GUI程序的跨平台需求也越来越多。因此笔者计划重新抓一下Qt来实现跨平台GUI程序的实现。 0x01. 看看Qt Widgets Application项目结构 打开Qt5&#xff0c;点击“ New”按钮新建项目。…...

Linux网络编程:数据链路层协议

目录 前言&#xff1a; 1.以太网 1.1.以太网帧格式 1.2.MTU&#xff08;最大传输单元&#xff09; 1.2.1.IP协议和MTU 1.2.2.UDP协议和MTU 1.2.3.TCP协议和MTU 2.ARP协议&#xff08;地址解析协议&#xff09; 2.1.ARP在局域网通信的角色 2.2.ARP报文格式 2.3.ARP报文…...

企业估值的三种方法

估值模型三剑客—DCF、P/E、EV /EBITDA 三种主要估值模型的优缺点: DCF 优点&#xff1a;通过对自由现金流的折现计算&#xff0c;反映了公司内在价值的本质&#xff0c;是最重要与最合理的估值方法。 缺点&#xff1a;未来自由现金流的估计不准确&#xff0c;受折现率影响…...

比亚迪正式签约国际皮划艇联合会和中国皮划艇协会,助推龙舟入奥新阶段

6月5日&#xff0c;比亚迪与国际皮划艇联合会、中国皮划艇协会在深圳共同签署合作协议&#xff0c;国际皮划艇联合会主席托马斯科涅茨科&#xff0c;国际皮划艇联合会秘书长理查德派蒂特&#xff0c;中国皮划艇协会秘书长张茵&#xff0c;比亚迪品牌及公关处总经理李云飞&#…...

宏集Panorama SCADA:个性化定制,满足多元角色需求

前言 在考虑不同人员在企业中的职能和职责时&#xff0c;他们对于SCADA系统的需求可能因其角色和工作职责的不同而有所差异。在SCADA系统的设计和实施过程中&#xff0c;必须充分考虑和解决这种差异性。 为了满足不同人员的需求, 宏集Panorama SCADA平台具备灵活的功能和定制…...

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序&#xff1a;千万别搞反了&#xff0c;越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者&#xff1a;方小格 来源&#xff1a;国学文化&#xff08;gxwh001&#xff09; 导语 比一个好的圈子更重要的&#xff0c;是自己优质的能力。 唐诗宋…...

图片和PDF展示预览、并支持下载

需求 展示图片和PDF类型&#xff0c;并且点击图片或者PDF可以预览 第一步&#xff1a;遍历所有的图片和PDF列表 <div v-for"(data,index) in parerFont(item.fileInfo)" :key"index" class"data-list-item"><downloadCard :file-inf…...

图论第5天

127.单词接龙 需要cout看一下过程。 #include <iostream> #include <queue> #include <stack> #include <unordered_map> #include <unordered_set> #include <vector> using namespace ::std;class Solution { public:int ladderLength(…...

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…...

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)

概览 在任何语言中对序列(或集合)元素的排序无疑是一种司空见惯的常规操作,在 Swift 语言里自然也不例外。序列排序看似简单,实则“暗藏玄机”。 要想真正掌握 Swift 语言中对排序的“各种姿势”,我们还得从长计议。不如就先从最简单的排序基本功开始聊起吧。 在本篇博…...

redis 04 redis结构

1.客户端...

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…...

web前端 孙俏:深度探索与实战之路

web前端 孙俏&#xff1a;深度探索与实战之路 在这个数字化、信息化的时代&#xff0c;web前端技术以其独特的魅力&#xff0c;吸引着越来越多的开发者投身其中。今天&#xff0c;我们将跟随孙俏的脚步&#xff0c;一同探索web前端的深度与广度&#xff0c;揭开其神秘的面纱。…...

opencv实战小结-银行卡号识别

实战1-银行卡号识别 项目来源&#xff1a;opencv入门 项目目的&#xff1a;识别传入的银行卡照片中的卡号 难点&#xff1a;银行卡上会有一些干扰项&#xff0c;如何排除这些干扰项&#xff0c;并且打印正确的号码是一个问题 最终效果如上图 实现这样的功能需要以下几个步骤…...

注销主体备案与网站备案表/宁波网站推广运营公司

1.什么是EPEL?EPEL&#xff08;企业linux额外安装包&#xff09;主要是针对Fedora项目&#xff0c;由开源社区支持创建的一个高质量安装包的源仓库&#xff0c;它支持基于Fedora的Red Hat Enterprise Linux (RHEL),还有兼容性的衍生版本&#xff0c;例如CentOS和ScientificLin…...

网站开发建设/厦门seo排名优化方式

OpenMP --- 线程同步 1. 引言 在OpenMP中&#xff0c;线程同步机制包括互斥锁同步机制和事件同步机制。 2. 互斥锁同步 互斥锁同步的概念类似于Windows中的临界区&#xff08;CriticalSection&#xff09;以及Windows和Linux中的Mutex以及VxWorks中的SemTake和SemGive&#xff…...

特产网站设计/seo网站推广软件排名

http请求介绍 HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP&#xff0c;使HTTP客户&#xff08;如Web浏览器&#xff09;能够从HTTP服务器(Web服务器)请求信息和服务&#xff0c;HTTP目前协议的版本是1.1.HTTP是一种无状态的协…...

天津网站建设如何/郑州网站顾问

Caused by: java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams 最近&#xff0c;在android中用代码动态改变某种布局&#xff08;组件&#xff09;的高度时&#xff0c;会遇到如题所示的类转换异常。上网查了一下&#xff0c;如下所示&#xff1a;Thes…...

网站正在建设中单页/重庆seo推广外包

13.3.2 cocos2d项目如何支持ARCiOS 5中所支持的全新特性ARC&#xff08;Automatic Reference Counting&#xff09;首次在iOS系统中提供了自动内存管理&#xff0c;从而避免因为对retain、release、autorelease这些命令的错误调用而导致内存泄漏。实际上&#xff0c;Apple还成功…...

wordpress git升级/网站推广的途径和方法

如果您只想使用CSS3&#xff0c;甚至不需要使用任何jQuery / Javascript。只需在您的CSS中执行此操作&#xff1a;.confirm_selection {-webkit-transition: text-shadow 0.2s linear;-moz-transition: text-shadow 0.2s linear;-ms-transition: text-shadow 0.2s linear;-o-tr…...