python学习随笔

1、选取标签为C并且只取前两行,选完类型还是dataframe

df = df.loc[0:2, ['A', 'C']] 
df = df.iloc[0:2, [0, 2]] 

不同:loc是根据dataframe的具体标签选取列,而iloc是根据标签所在的位置,从0开始计数。

2、加减乘除等操作的,比如dataframe的一列是数学成绩(shuxue),另一列为语文成绩(yuwen),现在需要求两门课程的总和。可以使用df['shuxue'] +

df['yuwen'](选取完之后类型为series)来获得总分,而不能使用df.iloc[:,[2]]+df.iloc[:,[1]]或df.iloc[:,['shuxue']]+df.iloc[:,['yuwen']],这会产生错误结果。

 

3、使用df.icol(i)来选取列,选取完的也不是dataframe而是series,i为该列所在的位置,从0开始计数。

4、gran = int(round(np.timedelta64(largest - second_largest) / np.timedelta64(1, 's')))  #转换成秒

5、anoms = all_data[i][all_data[i].timestamp.isin(s_h_esd_timestamps)]

6、periodic_maxes = df.groupby( df.timestamp.map(Timestamp.date)).aggregate(np.max).value   #按天求最大值

7、ESD_example_data = copy.deepcopy(total_Y)

8、对于给定的显著性水平,可以使用百分点函数(PPF)计算临界值,例如0.05(95%置信度)。

此功能可用于SciPy中的t分布,如下所示:

  # calculate the critical value

  alpha = 0.05

  cv = t.ppf(1.0 - alpha, df)

  p值可以用t分布上的累积分布函数来计算(同样在SciPy中)。

  # calculate the p-value

  p = (1 - t.cdf(abs(t_stat), df)) * 2

9、在Python中,如何将一个字符串数组转换成整型数组

py2:

>>> arr = ['22','44','66','88']

>>> arr = map(int,arr)

>>> print(arr)

[22, 44, 66, 88]

py3:

>>> arr = ['22','44','66','88']

>>> arr = list(map(int,arr))

>>> print(arr)

[22, 44, 66, 88]
10、时间戳转换成date

def time_to_datetime(time_at):
    str_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1476923280))
    return pd.to_datetime(str_time)

11、python进行数据处理——pandas的drop函数

https://blog.csdn.net/nuaadot/article/details/78304642

12、python 四位数整数补零

n = "%04d" % n
print n
0123

13、同名文件

if os.path.exists(filename):
    raise ValueError("路径里千万不能有同名文件,否则会叠加文件!!!")

14、dataframe.to_csv(),(用pandas)写入时,当数据量很大时,行写入(30分钟)要比列写入(秒),慢好几百多倍

15、分段存储

for i in range(0, len(data), 10000):
    data[i:i+10000]

16、to_csv的参数设置,  'a'不覆盖

dataframe.to_csv(filename, mode='a', header=False, encoding='utf-8', index=False)

17、三位随机数:

str(random.randint(100, 999))

18、Python如何读取、拆分大文件

pd.read_table("data/ex1.csv", chunksize=10000, header=None, sep=',')
for chunk in data:
    print(chunk)

19、np.float64 not float 

datefram.astype(np.int64)

20、dropna

删除DataFrame中值全为NaN或者包含有NaN的列或行

删除NaN所在的行:
删除表中全部为NaN的行
df.dropna(axis=0,how='all')  

删除表中含有任何NaN的行
df.dropna(axis=0,how='any') #drop all rows that have any NaN values
删除NaN所在的列:
删除表中全部为NaN的列
df.dropna(axis=1,how='all') 
删除表中含有任何NaN的列
df.dropna(axis=1,how='any') #drop all rows that have any NaN values

21、按照时间天分组

data.groupby(data.index.map(Timestamp.date))
结果是tuple(Timestamp.date"2019-03-05", series)

22、连接series,,,pd.concat([data1, data2], axis=0)

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)
参数说明
objs: series,dataframe或者是panel构成的序列lsit
axis: 需要合并链接的轴,0是行,1是列
join:连接的方式 inner,或者outer

23、自定义索引:data.set_index("timestamp", drop=False, inplace=True)

Pandas可以使用某一列来重新自定义DataFrame的索引,通过set_index()方法来实现,该方法主要有两个参数:

  • inplace,如果设置为True就不会返回一个新的DataFrame,而是直接修改该DataFrame
  • drop,如果设置为True,就会移出掉该列的数据

24、本地时间的区别

str_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time_at - 8 * 60 * 60))
str_time.fromtimestamp(time_at).strftime('%Y-%m-%d %H:%M:%S')

str_time = datetime.utcfromtimestamp(time_at).strftime('%Y-%m-%d %H:%M:%S')

25、pandas.DataFrame的index重新排列(从0开始)

  重新赋值pandas.DataFrame.index即可。

df1.index = range(len(df1))
df1.reset_index(drop=True, inplace=True)

26、

list = []
for i in range(100):
    if i % 2 == 1:
    list.append(i) 

等价于

list = [i for i in range(100) if i % 2 == 1]

27、使用enumerate内置函数来给元素加上序号形成元组:

list = ['a', 'b', 'c']
for x in enumerate(list):
    print(x)

运行结果为: (0, 'a') (1, 'b') (2, 'c')

28、我们可以使用raise语句自己触发异常

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

29、断言

assert isinstance(astring, str) 

30、Python上下文管理器与with语句

上下文管理器的任务是:代码块执行前准备,代码块执行后收拾。

31、使用concurrent.futures实现并行计算

(1)创建进程池Executor

concurrent.futures.ProcessPoolExecutor(max_workers=None)

建立进程池Executor。max_workers表示进程池的进程数量限制,缺省为None,表示与CPU数量相同。

concurrent.futures.ThreadPoolExecutor(max_workers=None) 

多讲一个线程池Executor的创建。

(2)创建子进程Future

  (a)直接提交单个子进程:

  XXX.submit(fn, *args, **kwargs)

  向进程池提交一个子进程(future对象),子进程直接开始运行,并返回该future对象。future对象对应函数fn(*args, **kwargs)。XXX为进程池Executor。

  (b)map方式(同时提交多个子进程):

  XXX.map(fn, *iterables, timeout=None, chunksize=1) 

  并发map函数,返回迭代器(与map(fn,*iterables)返回相同,只是并发执行)。注意这个并行与mulitprocessing模块中的并行也有差异,这里是同批次的子进程同步执行,直到该批次所有进程结束后,才开始下一批次执行。XXX为进程池Executor。

  fn:被调函数,
  iterables:个数与被调函数的参数个数相同(每个iterable对应一个参数)。
  timeout:最大等待时间。缺省为None,表示无限等待。
  chunksize:缺省为1,表示iterables中的元素将一次送出1个到进程池。如大于1,则一次送出chunksieze个元素到进程池。对于非常大的iterables,设置较大的chunksize,将显著加快执行速度(只对ProcessPoolExecutor有用。对ThreadPoolExecutor无用,该值忽略)。

(3)with上下文管理

  如果直接使用executor和future,多进程执行完成后,最好手动释放资源:

  XXX.shutdown() #所有任务完成后,清理并释放进程池Executor相关的资源。

  更好的办法是采用with上下文管理:

  with concurrent.futures.ProcessPoolExecutor() as executor:
     res = executor.map(fuc, ...)

32、知识点:
random.random()      :返回 0 <= n < 1的随机实数。
random.uniform(a,b) :返回 a <= n < b的随机实数。
random.randrange([start],stop,[step]) :返回range([start],stop,[step])的随机整数。
random.choice(seq)   :返回seq序列中的任意元素。
random.shuffle(seq)  :随机移位。
random.sample(seq,n) :从序列中取n个随机的元素。

33、pandas将index转换为datetime

df.index = pd.to_datetime(df.index)

34、设置坐标轴

ax = plt.gca()
ax.set_xlabel('x-label', fontsize=fontsize)
ax.set_ylabel('y-label', fontsize=fontsize)
ax.set_title('Title', fontsize=fontsize)

 

35、经常遇到问题 ValueError: If using all scalar values, you must pass an index,因为pandas 的dataframe需要一个可迭代的对象
换成列表 或者加个index就可以解决这个问题

 

36、数字转换成excel列序号:

def convert_to_title(n):
    result = ""
    while n != 0:
        result = chr((n-1) % 26+65) + result
        n = (n-1)//26
    return result

37、python 保留2位小数

1、round
In [3]: a=21.2345
In [4]: round(a,2)
Out[4]: 21.23
2、%nf
In [5]: b = '%.2f'%a
Out[6]: '21.23'
In [7]: b = float('%.2f'%a)
3'{.%2f}'.format()
In [10]: b = '{:.2f}'.format(a)
Out[11]: '21.23'

38、python中的sum函数.sum(axis=1)

np.sum([[0,1,2],[2,1,3]],axis=1)

结果就是:array([3,6])

39、Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。

dict.setdefault(key, default=None)
参数

key -- 查找的键值。
default -- 键不存在时,设置的默认键值。
demo:

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.setdefault('Age', None)
print "Value : %s" %  dict.setdefault('Sex', None)
Value : 7
Value : None

40、Python字符串格式化千分位逗号分隔

print "{:,}".format(99999999)

# 结果
# 99,999,999

41、join箭头连接

" —> ".join(all_list)

42、PYTHON删除某目录下的所有文件

import shutil
shutil.rmtree(r'G:\test')
会删目录,如果想不删目录的话,就不能用这个函数了,需要自己写代码来递归删除文件夹中的内容,或者还是用这个函数,但是删完以后再新建文件夹。
import shutil  
shutil.rmtree('要清空的文件夹名')  
os.mkdir('要清空的文件夹名')  
os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
os.removedirs() 方法用于递归删除目录。像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。
os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。

递归删除目录和文件的方法(类似DOS命令DeleteTree):

import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

如果想把一个文件从一个文件夹移动到另一个文件夹,并同时重命名,用shutil也很简单:

shutil.move('原文件夹/原文件名','目标文件夹/目标文件名') 

43、求和

sum_cnt = np.sum([x[1] for x in list])

 

44、Python中Numpy库中的np.sum(array,axis=0,1,2...)

c = np.array([[[0, 1, 2,3], 
               [4, 5, 6,7]],
               [[1, 2, 3,4],
                [5,6,7,8]]]
                
 print( c.sum(axis=0))
 print( c.sum(axis=1)) 
 print( c.sum(axis=2))  

45、特殊用法:mat (or array).reshape(c, -1);  必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示(-1的作用就在此,自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错)

46、存文件

output_file = open("shishi.pkl", 'wb')
pickle.dump(data, output_file)
output_file.close()
input_file = open("shishi.pkl", 'rb')
data = pickle.load(input_file)

47、python 判断为空nan, null

对整体的series或Dataframe判断是否未空,用isnull()
eg:
pd.isnull(df1) #df1是dataframe变量

对单独的某个值判断,可以用 np.isnan()
eg: np.isnan(df1.ix[0,3]) #对df1的第0行第3列判断


48、Python中可以用如下方式表示正负无穷:

float("inf"), float("-inf")

49、log1p() 函数

log1p() 函数返回 log(1+number),甚至当 number 的值接近零也能计算出准确结果。

 

50、python numpy 一维数组转变为多维数组

numpy.array(new_list).reshape(3,3)

51、python生成随机数组

https://blog.csdn.net/healthy_coder/article/details/50502643

52、

 


 

 



 


 

posted @ 2019-04-10 09:06  知是行之始,行是知之成  阅读(429)  评论(0编辑  收藏  举报