python编程中的经验(一直更新)

文章目录

  • 1. python基础语法
    • 1.1 怎么让两个list或者其它可以迭代的放到一起
    • 1.2 random.choice(x, n, replace=True) numpy中从某个数据集中选择
    • 1.3 如何根据key返回字典的value
    • 1.4 The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    • 1.5 到底是.xxx呢还是.xxx()呢??
    • 1.6 list and generator and any(iterable) all(iterable)
    • 1.7 globals 获取全局的变量/函数/类
    • 1.8 a = a.append(3)这件事
    • 1.9 <class "NoneType">
    • 1.10时间格式的整理
      • 时间格式转换 str --> datetime or datetime --> str
      • 时间格式的加减(加秒/加小时/加天/周/月等)
      • 时间格式的提取(比如将dataframe中某一列设为周)
  • 2. numpy
    • 2.1 numpy中如何使得维度降低维度
    • 2.2. np.bincount()
    • 2.3 numpy里的高级索引
    • 2.4. np.unique()
    • 2.5 re.sub(pattern, repl, string, count=0, flags=0)
    • 2.6 设置展示行(列也是同理的,可以自己去查)
    • 2.7 ~的作用
  • 3. pandas
    • 3.1 查看某行是不是有重复值
    • 3.2 df.value_counts(normalize: bool = False,sort: bool = True,ascending: bool = False,bins=None, dropna: bool = True)
    • 3.3 报错 Traceback (most recent call last): parser = TextFileReader(filepath_or_buffer, **kwds) self._engine = self._make_engine(self.engine)
    • 3.4 存储为csv后科学计数法的问题
    • 3.5 读json格式
    • 3.6 查看完整的错误信息
    • 3.7 多条件索引
    • 3.8 读excel某几行
    • 3.9 df['xxx'].values
    • 3.10 df.dtypes
    • 3.11 删除多列同时为0的行
    • 3.12创建dataframe的方式
    • 3.13 Series访问
    • 3.14 iloc和loc

1. python基础语法

1.1 怎么让两个list或者其它可以迭代的放到一起

可以使用zip
可以使用索引

for i in range(len(xxx)):list[i]

1.2 random.choice(x, n, replace=True) numpy中从某个数据集中选择

不是随机random.int() 而是从既有数据集中选择!

1.3 如何根据key返回字典的value

精髓就在于,直接封装成方法!
这样就可以直接调用了!!

def return_key(levels_dict, target):for key, value in levels_dict.items():if value == target:return keyreturn "ERROR"return_key(levels_dict, val)

1.4 The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。

元素除了是 0、空、FALSE 外都算 TRUE。

注意针对的是可迭代的对象!

1.5 到底是.xxx呢还是.xxx()呢??

是不是经常会有疑问,到底加不加括号!
其实这个可以通过经验来获得!
如果我们想返回的是值,比如df.columns,那么多半是不加括号的;
而如果是一个功能,比如sort,那么就需要加括号

1.6 list and generator and any(iterable) all(iterable)

如果是any和all则选用generator
因为只要判断了第一个满足条件或者不满足条件就可以返回了,list则要全部访问完
any(i for i in range(n)) # 就是一个括号
any([i for i in range(n)])

1.7 globals 获取全局的变量/函数/类

链接

链接

一句话: 就是会返回所有全局变量的一个字典, key值为该变量的命名;
这里的全局变量包含了:
**导入的包! 导入的函数! **
如果是在某个函数中,则包含了局部变量(参数);
如果是在类中,则包含了定义的实例变量.

在调用的时候,由于globals()是一个字典,所以先加key值,再写参数

train_dataset = globals()[dataset_name](conf, conf.data.train_json_files, generate_dict=True)

1.8 a = a.append(3)这件事

    loc_level = [level_levelid[i][0] for i in range(idx+1)]\.append(ll[1])print(loc_level)  # None## 正确loc_level = [level_levelid[i][0] for i in range(idx+1)]loc_level .append(ll[1])print(loc_level)  # 

好像没错,但是其实错了 ! 因为这个时候a被赋值是append()函数
这个函数是inplace的,不需要重新定义,没有返回值,肯定为None

1.9 <class “NoneType”>

一般是函数的输出会是NoneType
判断方式:

a is None

1.10时间格式的整理

时间格式转换 str --> datetime or datetime --> str

需要的函数:

import datetime

时间格式的加减(加秒/加小时/加天/周/月等)

datetime.timedelta(
[days
[, seconds
[, microseconds
[, milliseconds
[, minutes
[, hours
[, weeks
]]]]]]])now=datetime.datetime.now()
now
datetime.datetime(2018, 1, 20, 11, 5, 18, 227000)
delta=datetime.timedelta(days=1)
delta
datetime.timedelta(1)
newtime=now+delta

时间格式的提取(比如将dataframe中某一列设为周)

2. numpy

2.1 numpy中如何使得维度降低维度

降低维度到1维

x = x.reshape(-1)x = x.flatten()

2.2. np.bincount()

  • 解释
    这是一个加权对同类累加的函数 ! 当然是同类的加权! 同时是降序返回

  • 参数
    x
    weights(optional): array of the same shape as x,默认是1
    minlength(optional):

  • 举例
    x: array([2, 2, 0, 2, 0, 0, 1, 1, 2, 1, 1, 0, 1, 1, 0, 1, 2, 2, 0])
    weights: array([0.4, 0.4, 0.2,0.2, …])

x * weights 后对同类进行累加并返回
所以返回的是三个数 [x_1, x_2, x_3] 2/1、0的加权和

  • 应用场景
    一般用在求概率上!
    比如gini系数!
   def gini(y):# Gini impurity (local entropy) of a label sequencehist = np.bincount(y)N = np.sum(hist)return 1 - sum([(i / N) ** 2 for i in hist])

2.3 numpy里的高级索引

  • 支持索引查找
    x[[1,2,3], [2,3,4]]
    或者是x[1,2,3] 表示取的是array x的索引为1,2,3的数组

2.4. np.unique()

去重以及排序

2.5 re.sub(pattern, repl, string, count=0, flags=0)

re.sub的参数:5个参数

参数1:pattern
表示正则中的模式字符串。
参数2:repl
就是replacement,表示被替换的字符串,可以是字符串也可以是函数。
参数3:string
表示要被处理和替换的原始字符串
参数4:count
可选参数,表示是要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;
参数5:flags
可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。

import rere.sub('[,]', ',', str1)  # a = '   (rr 我)#1  (d 只是)#1  (p 以)#1  (vi 笑) (v 作答)#1#2#3 (。 。)'
a = re.sub(u"[\u4e00-\u9fa5]+", '*', a) # 匹配多个连续汉字,替换为*

2.6 设置展示行(列也是同理的,可以自己去查)

pd.options.display.max_rows = None
pd.set_option('display.max_rows', 200)

每次运行前都要重新设置!

2.7 ~的作用

~就是取反,只能用于numpy,list是不行的! 当然用到dataframe也是可以的,因为它每个单元格都是ndarray
~np.array([True, ])

3. pandas

3.1 查看某行是不是有重复值

是否有重复行
any(df.duplicated())
可以用于某一列有重复值

查看重复的行
df[df.duplicated()]
去除重复行
df.drop_duplicats(subset = [‘price’,‘cnt’],keep=‘last’,inplace=True)
drop_duplicats参数说明:
subset subset用来指定特定的列,默认所有列
keep keep可以为first和last,表示是选择最前一项还是最后一项保留,默认first
inplace inplace是直接在原来数据上修改还是保留一个副本,默认为False

3.2 df.value_counts(normalize: bool = False,sort: bool = True,ascending: bool = False,bins=None, dropna: bool = True)

记住返回的是series! int类型,虽然显示的是text + id
还可以实现mean!

  Examples-------->>> index = pd.Index([3, 1, 2, 3, 4, np.nan])>>> index.value_counts()3.0    21.0    12.0    14.0    1dtype: int64With `normalize` set to `True`, returns the relative frequency bydividing all values by the sum of values.>>> s = pd.Series([3, 1, 2, 3, 4, np.nan])>>> s.value_counts(normalize=True)3.0    0.41.0    0.22.0    0.24.0    0.2dtype: float64**bins**Bins can be useful for going from a continuous variable to acategorical variable; instead of counting uniqueapparitions of values, divide the index in the specifiednumber of half-open bins.>>> s.value_counts(bins=3)(0.996, 2.0]    2(2.0, 3.0]      2(3.0, 4.0]      1dtype: int64**dropna**With `dropna` set to `False` we can also see NaN index values.>>> s.value_counts(dropna=False)3.0    21.0    12.0    14.0    1NaN    1dtype: int64"""

3.3 报错 Traceback (most recent call last): parser = TextFileReader(filepath_or_buffer, **kwds) self._engine = self._make_engine(self.engine)

  • 错误分析
    这是因为pd.read_csv()代码运行出错!
    最可气的是出现上面的错误,pandas不显示全部的出错信息,而且出奇的一致,你也不知道你哪个参数写错了!
    但是注意这里出错只有一种可能是你的参数写错了!

在这里插入图片描述

  • 运行代码
pd.read_csv('../data/type_count2.csv', encoding='GBK')
或者
pd.read_csv('../data/type_count2.csv', encoding='utf-8')
或者
pd.read_csv('../data/type_count2.csv', encoding='utf-8', sep='\t')
  • 出错原因:

  • 第一: 最重要的看看路径!!!!
    一般都是路径引起的!! 给我回去一层一层的看

  • 第二: encoding
    如果上面没有错误,那么请看编码问题! UTF-8或者是GBK

  • 第三: sep
    默认是逗号,如果有问题,一定尝试别的’\t’

  • 小技巧:查看完整错误信息

try:pd.read_csv('../data/xx')
except Exception as e:print(e.args)print('=======')print(traceback.format_exc())

在这里插入图片描述

3.4 存储为csv后科学计数法的问题

  • 场景分析
    主要是想保存csv或者是excel,但是某一列既有字符串,又有(int),而且int还是长int; 由于csv中自动保存使用科学计数法!
    这是csv或者excel的显示问题,不是
    在这里插入图片描述

方法解决:

  • 方法一:就这样吧
    链接

    Excel打开CSV数字显示为科学计数法解决办法

压根不要着急! 虽然它在csv或者是excel中是科学计数法,但是精度并没有丢失!!!!!!
前提是你不要点ctrl+s;
你读的时候数据还是原封不动的,所以没有必要慌张

如果点ctrl+S保存,会直接保存更改精度后的数据!!

  • 方法二:转变csv的格式
    如果真的想保存为非科学计数法,可以尝试这个方法

分隔符选择为’,'(因为to_csv默认是逗号)
在这里插入图片描述
注意三列都需要设置哦!!!
在这里插入图片描述

这样就可以了!!

  • 方法三:保存为txt格式
    这种直接保存为txt格式,就不会受到csv格式的制约了!
df_.to_csv('tt.txt', endoing='utf-8', sep='\t')
  • 方法四: 对每一行多一个字符
    如果我们在保存的时候多加一个字符自动转为字符串!
    注意,就算我们使用
df['xxx'] = df['xxx'].astype(str) 
或者是
df['xxx'] = df['xxx'].apply(lambda x: str(x)) 
都是无济于事的

因为它本来就是str,但是在转为csv的时候还是会以同样的方式把它认为int! giao!
所以要这样

# 写端:
df['xxx'] = df['xxx'].apply(lambda x: str(x) + '\t') 
或者是
df['xxx'] = df['xxx'].apply(lambda x: str(x) + ' ') 
# 读端:
df['xxx'] = df['xxx'].apply(lambda x: s.strip() 

这样你保存的时候就不会显示为科学计数法了!!

3.5 读json格式

panads同样可以读json! 不需要用json.loads(xxx)
前提:json中每个字典对象都要有相同的ziduan

with open('tt.json', 'r', encoding='utf-8') as file:json_info = file.read()
df = pd.read_json(json_info)
  • groupby + reset_index + sort_values
df2_ = df.groupby(['channelid','type',])['count'].sum().reset_index().sort_values(['type', 'count'], ascending=False)

使用某两列进行分组生成了groupby对象,该对象以[‘channelid’,‘type’] 为索引, 属性是其它属性,然后再对count列求和!!!
在这里插入图片描述
reset_index()使得index为列!

再以两列排序!!

3.6 查看完整的错误信息

try:pd.read_csv('../data/xx')
except Exception as e:print(e.args)print('=======')print(traceback.format_exc())

在这里插入图片描述

3.7 多条件索引

必须使用 “&”, 而不是and

data_counts[(data_counts['数量']>100) & (data_counts['数量']<500)]

3.8 读excel某几行

pandas.read_excel(io,
sheet_name=0,
header=0,      # 第几行为列名
names=None,    # 新的列名
index_col=None,
usecols=None,  # 几列
squeeze=False,
dtype=None,
engine=None,converters=None,true_values=None,
false_values=None,
skiprows=None, # 跳过第几行
nrows=None,    # 读多少行
na_values=None,keep_default_na=True,
verbose=False,parse_dates=False,date_parser=None,
thousands=None,
comment=None,skip_footer=0,skipfooter=0,
convert_float=True,mangle_dupe_cols=True,**kwds)

如果只读某几行,比如第一行我们是不需要的,那么就skiprows = 1
在这里插入图片描述

3.9 df[‘xxx’].values

  • dataframe格式
    我们在展示某列的时候不想要其index,只想获得值,这个时候就可以使用values
  • series格式
    其实,某一列就是要给series,series就相当于是一个有index的array,当取values的时候,就和array一样的!

3.10 df.dtypes

展示df每一列的数据类型

3.11 删除多列同时为0的行

dropna: 用于删除异常值的,包含NA的
drop: 同上

columns = ['xx', 'xxx', ....]
data[(data.loc[:, columns]!=0).any(1)] # 

any() : 用于判断一个迭代对象是不是全部为True,否则为False
any(iterable)

3.12创建dataframe的方式

链接

在这里插入图片描述
在这里插入图片描述

3.13 Series访问

series的索引访问! 都说series和ndarray一样, 但是其实也不一样! 因为ndarray通过切片下标来高级索引, 但是series还是得通过iloc或者loc****索引访问;
其次要清楚, 索引(高级索引)返回的是拷贝;
而切片访问返回的是视图!!!

series.iloc[[x, x, xx, x]] # 只需要写一个行就行,不需要全部!

链接

3.14 iloc和loc

iloc和loc都是通过所以来获取值的! 也就是行索引和列索引!
如果是完全根据索引顺序访问, 每次在访问的时候一定要reset_index一下!

如果本身索引带了类别属性, 那么就自己考虑吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cairngorm初学者入门教程 第六节--Cairngorm中Command利用Delegate与Service连接

在上一节&#xff0c;我们利用FrontController 去映射 Event与Command 在这一节我们主要针对Command这部分动作做介紹。在RIA应用程序中&#xff0c;不可或缺的部份就是跟后台服务器连接进行数据传递。Command通过Delegate去做Services的部份(包含Remoting,WebServices,…等) C…

3d点击_3D打印服务加工在医疗器械行业的应用

3D打印技术如今已经很常见的出现在了我们日常的制造生产中。普通的3D打印机从最开始的几万块到如今的几千块&#xff0c;设备价格的降低也使得3D打印技术普及率的增加&#xff0c;而技术的普及也推动着技术的发展。3D打印开始应用到许多行业当中&#xff0c;下面悟空打印坊3D打…

所有算法库的使用(sklearn,scipy)

文章目录1. sklearn1.1 sklearn.preprocessing 之 fit 和 transform 以及 fit_transform1.2 算法之 fit 和 predict和predict_proba1.3 predict_proba1.4 各种评测指标1.4.1 R2R^2R21.4.2 准确度、精准率、召回率1.4.3 平均绝对误差(MAE)和均方误差(MSE)1.5 特征缩放 StandardS…

android aar保存图片文件异常_我去!合并AAR时踩坑了!

点击上方“刘望舒”&#xff0c;马上关注&#xff0c;早上8:42推送真爱&#xff0c;请置顶或星标作者: leeon7https://www.jianshu.com/p/8f7e32015836背景在输出Android模块时&#xff0c;有时会因为个别原因(比如来自业务的不可抗力)&#xff0c;要求将模块打包成一个文件提供…

与kylin_Kylin 迁移到 HBase 实践在小米的实践

背景小米Kylin生产环境部署的是基于社区2.5.2修改的内部版本&#xff0c;所依赖HBase集群是一个公共集群&#xff0c;小米内部很多离线计算服务共享使用该HBase集群。由于Kylin已经产生超过6000张HBase表&#xff0c;给HBase的metadata管理造成了不小的压力&#xff0c;HBase m…

LeetCode 1227. 飞机座位分配概率(DP+数学归纳法)

1. 题目 有 n 位乘客即将登机&#xff0c;飞机正好有 n 个座位。第一位乘客的票丢了&#xff0c;他随便选了一个座位坐下。 剩下的乘客将会&#xff1a; 如果他们自己的座位还空着&#xff0c;就坐到自己的座位上&#xff0c; 当他们自己的座位被占用时&#xff0c;随机选择…

LeetCode 1025. 除数博弈(动态规划)

1. 题目 爱丽丝和鲍勃一起玩游戏&#xff0c;他们轮流行动。爱丽丝先手开局。 最初&#xff0c;黑板上有一个数字 N 。在每个玩家的回合&#xff0c;玩家需要执行以下操作&#xff1a; 选出任一 x&#xff0c;满足 0 < x < N 且 N % x 0 。用 N - x 替换黑板上的数字…

BN / LN / IN / GN /

链接 但是代码不敢苟同! 所以自己写了两种代码! 由于这只是测试, 并不是用来训练, 所以α和β参数就没有加! def BN(inputs):c inputs.shape[1]for i in range(c):channel inputs[:,i,:,:]mu np.mean(channel)var np.var(channel)channel_new ((channel - mu)/(np.sqrt(…

中文验证码 php_还在苦恼验证码怎么实现?看看这个验证码组件合集,你想要的都有...

随着安全性的要求越来越高&#xff0c;如今的验证码已经不再是简单的四个数字或者字母了&#xff0c;更复杂的图形验证码和行为验证码已经成为了更流行的趋势&#xff0c;但更难的实现也让很多开发者头秃&#xff0c;Gitee 已经替你们想到了这一点。不多说了&#xff0c;下面这…

reload端口 tomcat_tomcat上部署网站的三种方式

一、利用webapps文件夹自动部署这是最简单的方式&#xff0c;只要将网站直接拷贝到&#xff1a;tomcat根目录下的webapps文件夹里举例&#xff1a;helloworld文件夹下创建里index.html文件&#xff0c;然后把helloworld文件夹移动到tomcat根目录下webapps文件夹里&#xff0c;重…

不能用蛮力法解决的问题_溆浦事蒙汉:脱贫攻坚绝不能心浮气躁骄傲自满疲倦厌战...

脱贫攻坚绝不能心浮气躁骄傲自满疲倦厌战——蒙汉到卢峰镇检查“四支队伍”集村部工作情况检查南华山村“四支队伍”集村部工作情况与大潭村贫困户舒采米座谈红网溆浦讯(记者 伍交才)8月28日&#xff0c;市人大常委会副主任、县委书记蒙汉到卢峰镇南华山村、大潭村检查“四支队…

mock模拟接口测试 vue_vue+mock.js实现前后端分离

之前都是介绍在普通项目中使用mock.js&#xff0c;那么本次就来介绍一下在vue中使用mock.js实现前后端分离。安装&#xff1a;npm install mockjs这里先写个小案例介绍一下具体使用&#xff0c;写法不规范&#xff0c;仅供参考。然后案例讲完后我们讲具体的规范使用那么一起来看…

mysql slow log 分析工具_mysql slow log分析工具的比较

mysql 中的 slow log 是用来记录执行时间较长(超过 long_query_time 秒)的 sql 的一种日志工具。启用 slow log在 my.cnf 中设置[mysqld]slow_query_logonslow_query_log_filemysql-slow重启 MySQL 服务。五款常用工具mysqldumpslowmysqlslamyprofimysql-explain-slow-logmysql…

利用寄存器进入栈值交换

代码 varA, B: Word;beginA :1; B :2; asmmov ax, a //赋值 mov bx, b push ax //进栈 push bx pop ax //退栈 pop bx mov a, ax //利用栈先进后出, ax已退栈, 寄存器里的值为原bx 的值 mov b, bx //利用栈先进后出, bx已退栈, 寄存…

处理Excel,填充空白区域

在企业应用开发中经常是业务人员提供Excel的数据源&#xff0c;而开发人员将Excel数据导入到数据库中&#xff0c;然后在数据库中进行处理。在Excel中为了表示一种层次和所属关系&#xff0c;很多时候会产生很多空白的单元格。比如一个CRM数据&#xff0c;里面有销售团队、销售…

LeetCode 901. 股票价格跨度(单调栈)

1. 题目 编写一个 StockSpanner 类&#xff0c;它收集某些股票的每日报价&#xff0c;并返回该股票当日价格的跨度。 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今天&#xff09;。 例如&#xff0c…

LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

1. 题目 给你一个整数数组 arr 和一个目标值 target &#xff0c;请你返回一个整数 value &#xff0c; 使得将数组中所有大于 value 的值变成 value 后&#xff0c;数组的和 最接近 target &#xff08;最接近表示两者之差的绝对值最小&#xff09;。 如果有多种使得和最接近…

潜在语义分析(Latent Semantic Analysis,LSA)

文章目录1. 单词向量空间、话题向量空间1.1 单词向量空间1.2 话题向量空间2. 潜在语义分析算法2.1 例子3. 非负矩阵分解算法4. TruncatedSVD 潜在语义分析实践一种无监督学习方法&#xff0c;主要用于文本的话题分析其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系…

python分割提取字符串_Python 字符串操作(截取/替换/查找/分割)

python字符串连接先介绍下效率比较低的&#xff0c;有些新手朋友就会犯这个错误&#xff1a;a [a,b,c,d]content for i in a:content content iprint content说下为什么效率会低呢&#xff1f;原因&#xff1a;在循环连接字符串的时候&#xff0c;他每次连接一次&#xff0…

R语言chorolayer_R语言空间可视化:绘制英国脱欧投票地图

添加法国&#xff0c;它位于右下方&#xff0c;因此我们应该看到一点…plot(FR,addTRUE)然后&#xff0c;我们可以检索英国退欧公投数据referendumddply(referendum,.(Region,HASC_code),summarise,Remainsum(Remain),Leavesum(Leave))我们可以发现&#xff0c;脱欧赢得了51.89…