python使用中的一些坑(持续更新中。。。)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jin_tmac/article/details/79898706

pandas篇

1、
通常做数据分析时候会用pandas将数据转化成dataframe数据框的格式,

这里写图片描述
但是如果遇到只有一行数据的情况
这里写图片描述
就会报错:ValueError: If using all scalar values, you must pass an index
有如下两种处理方式:
这里写图片描述

2、常用list=[]、dict1=dict{}创建一个空列表和空字典表,再用数据框的时候,也可以用pd.DataFrame()直接创建一个空数据框,当然也可以指定一些列名,out_var = pd.DataFrame(columns=var_name) # 创建一个空的dataframe

3、在用append的时候,out_var.append(pd_lt)简单以为这样就连接上是错误滴。一定要out_var = out_var.append(pd_lt)。另外如果要在for循环外面引用内部append之后的变量。必须在外边定义全局变量!!
global out_lst
out_lst=pd.DataFrame()

4、#改变数据类型
df = pd.DataFrame([{‘col1’:’a’, ‘col2’:’1’}, {‘col1’:’b’, ‘col2’:’2’}])
df.dtypes

df[‘col2’] = df[‘col2’].astype(‘int’)
df[‘col2’] = df[‘col2’].astype(‘float64’)

5、如何找到NaN、缺失值或者某些元素的索引名称以及位置
np.where(np.isnan(df))[0]

6、缺失值nan
可以用pd.isnul(dt)或者np.isnan(dt)或者math.isnan(dt)三种方法

numpy篇

1、np.take
a = [4, 3, 5, 7, 6, 8]
indices = [0, 1, 4]
np.take(a, indices)
  array([4, 3, 6])
              
2、np.corrcoef(a) 计算行之间的相关系数,np.corrcoef(a, rowvar=0)计算列之间的相关系数

3、np.absolute(a) 、np.abs(a) 求a的绝对值矩阵

4、argsort、argmax、argmin
  argsort是对指定的array排序之后的索引,argmax返回最大值的索引,argmin返回最小值的索引

5、np.ravel()
这里写图片描述

6、np.allclose(a, b) 判断a,b两个矩阵是否相等

7、np.random产生随机数
其中np.random.randn(10), 生成10个0,1正态分布随机数
np.random.randint(0, 5, 10)生成10个在0,5之间的随机数

np.random.uniform(0,0.1,size=(10,20)) 产生10*20 的0~0.1的均匀分布数

基本语法

1、copy()与deepcopy()的区别,总结下就是deepcopy()之后,不管原数据内部什么格式,原数据改变也不会变;copy()是当数据内部嵌套的可变数据类型发生变化时,copy之后的数据也会发生变化。具体可以参见这篇博文

2、assert 断言
assert 1>2, ‘incorrect number’

3、对列表的extend、append、+=
a=[1, 2, 3] b=[7, 8, 9]
a.append(b)=[1, 2, 3, [7, 8, 9]]
a.extend(b)=[1, 2, 3, 7, 8, 9]
+=和extend效果一样

4、字符串翻转

找到下面5种方法的比较:

  1. 简单的步长为-1, 即字符串的翻转(常用);
  2. 交换前后字母的位置;
  3. 递归的方式, 每次输出一个字符;
  4. 双端队列, 使用extendleft()函数;
  5. 使用for循环, 从左至右输出;
  6. .借用列表,使用reverse()方法
string = 'abcdef'

def string_reverse1(string):
    return string[::-1]

def string_reverse2(string):
    t = list(string)
    l = len(t)
    for i,j in zip(range(l-1, 0, -1), range(l//2)):
        t[i], t[j] = t[j], t[i]
    return "".join(t)

def string_reverse3(string):
    if len(string) <= 1:
        return string
    return string_reverse3(string[1:]) + string[0]

from collections import deque
def string_reverse4(string):
    d = deque()
    d.extendleft(string)
    return ''.join(d)

def string_reverse5(string):
    #return ''.join(string[len(string) - i] for i in range(1, len(string)+1))
    return ''.join(string[i] for i in range(len(string)-1, -1, -1))

def string_reverse6(string):
    return ''.join(list(string).reverse())

5、实现逆序循环 for i in range(len, -1, -1)

6、7//2=3,7%2=1,7/2=3.5

7、if条件语句后面需要跟随bool类型的数据,即True或者False。然而,如果不是bool类型的数据,可以将其转换成bool类型的数据,转换的过程是隐式的。

在Python中,None、空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False。除此之外的其它对象都会被转化成True。

在命令if not 1中,1便会转换为bool类型的True。not是逻辑运算符非,not 1则恒为False。因此if语句if not 1之下的语句,永远不会执行。

8、s.split(’ ‘)和s.split()有区别,前者可以把所有的空格都当做分隔符,后者只能把一个空格当做空格符

9、连续空格只保留一个

s = "abc  def   ghi       xy"
print(' '.join(filter(lambda x: x, s.split(' ')))
#filter的用法,filter(function, iterable),其中function是个判断函数,例:
/*
def is_odd(n):
    return n % 2 == 1

newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist) --[1, 3, 5, 7, 9]
*/
#这个判断函数就是x不为空

print(' '.join(s.split()))#这个方法就能达到要求

猜你喜欢

转载自blog.csdn.net/jin_tmac/article/details/79898706