网站设计范例,织梦网站搭建,网站建设需要注意什么 知乎,个人主机做网站文章目录1. python基础语法1.1 怎么让两个list或者其它可以迭代的放到一起1.2 random.choice(x, n, replaceTrue) numpy中从某个数据集中选择1.3 如何根据key返回字典的value1.4 The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all…
文章目录1. python基础语法1.1 怎么让两个list或者其它可以迭代的放到一起1.2 random.choice(x, n, replaceTrue) numpy中从某个数据集中选择1.3 如何根据key返回字典的value1.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 NoneType1.10时间格式的整理时间格式转换 str -- datetime or datetime -- str时间格式的加减(加秒/加小时/加天/周/月等)时间格式的提取(比如将dataframe中某一列设为周)2. numpy2.1 numpy中如何使得维度降低维度2.2. np.bincount()2.3 numpy里的高级索引2.4. np.unique()2.5 re.sub(pattern, repl, string, count0, flags0)2.6 设置展示行列也是同理的可以自己去查2.7 ~的作用3. pandas3.1 查看某行是不是有重复值3.2 df.value_counts(normalize: bool False,sort: bool True,ascending: bool False,binsNone, 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].values3.10 df.dtypes3.11 删除多列同时为0的行3.12创建dataframe的方式3.13 Series访问3.14 iloc和loc1. python基础语法
1.1 怎么让两个list或者其它可以迭代的放到一起
可以使用zip 可以使用索引
for i in range(len(xxx)):list[i]1.2 random.choice(x, n, replaceTrue) 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 ERRORreturn_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_dictTrue)1.8 a a.append(3)这件事 loc_level [level_levelid[i][0] for i in range(idx1)]\.append(ll[1])print(loc_level) # None## 正确loc_level [level_levelid[i][0] for i in range(idx1)]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
]]]]]]])nowdatetime.datetime.now()
now
datetime.datetime(2018, 1, 20, 11, 5, 18, 227000)
deltadatetime.timedelta(days1)
delta
datetime.timedelta(1)
newtimenowdelta
时间格式的提取(比如将dataframe中某一列设为周)
2. numpy
2.1 numpy中如何使得维度降低维度
降低维度到1维
x x.reshape(-1)x x.flatten()2.2. np.bincount() 解释 这是一个加权对同类累加的函数 当然是同类的加权 同时是降序返回 参数 x weightsoptional array of the same shape as x默认是1 minlengthoptional 举例 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,23的数组
2.4. np.unique()
去重以及排序
2.5 re.sub(pattern, repl, string, count0, flags0)
re.sub的参数5个参数
参数1pattern 表示正则中的模式字符串。 参数2repl 就是replacement表示被替换的字符串可以是字符串也可以是函数。 参数3string 表示要被处理和替换的原始字符串 参数4count 可选参数表示是要替换的最大次数而且必须是非负整数该参数默认为0即所有的匹配都会被替换 参数5flags 可选参数表示编译时用的匹配模式如忽略大小写、多行模式等数字形式默认为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 ~的作用
~就是取反只能用于numpylist是不行的 当然用到dataframe也是可以的因为它每个单元格都是ndarray ~np.array([True, ])
3. pandas
3.1 查看某行是不是有重复值
是否有重复行 any(df.duplicated()) 可以用于某一列有重复值
查看重复的行 df[df.duplicated()] 去除重复行 df.drop_duplicats(subset [‘price’,‘cnt’],keep‘last’,inplaceTrue) 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,binsNone, 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(normalizeTrue)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(bins3)(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(dropnaFalse)3.0 21.0 12.0 14.0 1NaN 1dtype: int643.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, encodingGBK)
或者
pd.read_csv(../data/type_count2.csv, encodingutf-8)
或者
pd.read_csv(../data/type_count2.csv, encodingutf-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中是科学计数法但是精度并没有丢失 前提是你不要点ctrls 你读的时候数据还是原封不动的所以没有必要慌张
如果点ctrlS保存会直接保存更改精度后的数据
方法二转变csv的格式 如果真的想保存为非科学计数法可以尝试这个方法
分隔符选择为’,(因为to_csv默认是逗号) 注意三列都需要设置哦
这样就可以了
方法三保存为txt格式 这种直接保存为txt格式就不会受到csv格式的制约了
df_.to_csv(tt.txt, endoingutf-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, encodingutf-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], ascendingFalse)使用某两列进行分组生成了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_name0,
header0, # 第几行为列名
namesNone, # 新的列名
index_colNone,
usecolsNone, # 几列
squeezeFalse,
dtypeNone,
engineNone,convertersNone,true_valuesNone,
false_valuesNone,
skiprowsNone, # 跳过第几行
nrowsNone, # 读多少行
na_valuesNone,keep_default_naTrue,
verboseFalse,parse_datesFalse,date_parserNone,
thousandsNone,
commentNone,skip_footer0,skipfooter0,
convert_floatTrue,mangle_dupe_colsTrue,**kwds)如果只读某几行比如第一行我们是不需要的那么就skiprows 1
3.9 df[‘xxx’].values
dataframe格式 我们在展示某列的时候不想要其index只想获得值这个时候就可以使用valuesseries格式 其实某一列就是要给seriesseries就相当于是一个有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一下!
如果本身索引带了类别属性, 那么就自己考虑吧