python学习:零碎的内容(二)

...本来是在python学习:零碎的内容里不断盖楼,盖到62条的时候不知道写了啥,文章被封了一次。目前不敢再动了,新盖一楼。

  1. pip install XXX的时候总有ReadTimeoutError: HTTPSConnectionPool(host='....', port=443): Read timed out.
    参考https://github.com/pypa/warehouse/issues/3826
    试试 pip install --default-timeout=1000 package_name

  2. 日期空值:NaT
    df.apply(lambda x:pd.to_datetime(x, errors='coerce'))
    将df中string格式的日期(比方说2020/1/26)转化为datetime格式,如果有空值则为NaT

  3. 13位数的unix时间格式,转化为human readable
    Unix time also known as Epoch time, POSIX time
    即19870年1月1日后多少秒。13位数为19700101后多少毫秒(milliseconds)

from datetime import datetime
dt_object = datetime.fromtimestamp(1581162409463/1000)
print(dt_object.strftime("%Y-%m-%d %H:%M:%S")) 
print(dt_object)

# 得到:
2020-02-08 19:46:49
2020-02-08 19:46:49.463000
  1. plotly: 用make_subplots()作图,调整两个子图之间的距离,比例,共用Y轴:
    subplots
make_subplots(rows=1,cols=2, # 两个图并排放
              column_widths=[0.2,0.8],  # 一个占比20%,一个占比80%
              shared_yaxes=True,  # 共用Y轴
              horizontal_spacing=0.01)  # 两个图之间距离缩短
 

67.plotly 颜色使用集锦:
discrete颜色:
https://plot.ly/python/discrete-color/
内置颜色:
https://plot.ly/python/builtin-colorscales/#discrete-color-sequences
一个很棒的调色板网站(可能是搞设计的人用的),如下所示:

  1. os
    文件重命名os.rename('old','new')
    删除文件 os.system('rm XXX') 即可

  2. python里检查md5码

import hashlib
def file_as_bytes(file):
    with file:
        return file.read()
test = ['XXXXXXXXXXXXXXX.fastq',
        'XXXXXXXXXXXXXX.fastq']
[(fname, hashlib.md5(file_as_bytes(open(fname, 'rb'))).digest()) for fname in test]
  1. python2和python3中二进制和unicode character的问题
    decode: 二进制--->unicode character
    encode: unicode character--->二进制
    python2:
  • str: 8-bits value(二进制), unicode: unicode characters
  • 默认使用ASCII
  • with open(XXX.bin.'r') as ...默认设置为binary encoding
    python3:
  • bytes: 8-bits value(二进制), str: unicode characters
  • bytesstr是完全不一样的type, 连两者的空值都不能等同。
  • with open(XXX.bin,'r') as ...默认设置为utf-8 encoding,所以用python3打开binary格式文件,需要指定mode为'rb'

71.get()
参考https://stackoverflow.com/questions/2068349/understanding-get-method-in-python

t = {'a':1,'b':2,'c':3}
t['e'] # get Keyerror
t.get('e',None) # 如果key里没有'e',则默认返回None
  1. eumerate()的第二个参数
a = ['a','b','c']
for ind, i in eumerate(a,2):
  print(ind, i)

# 2 a
# 3 b
# 4 c
  1. zip() loop
    for ai, bi in zip(a,b):
    在Python3中,zip() return的是个generator, python2中return的是 a list of all the tuples it creates,如果对很大的list pair迭代,会耗损很大内存。如果要在python2中使用zip,最好看看izip(itertools)
  2. try
    参考https://www.thegeekstuff.com/2019/05/python-try-except-examples/
a = 12
b = 'test'
try:
  print(a+b)  # raise typeError
except TypeError: # 如果try里的运行结果是TypeError,那么就:
  print(str(a)+b)

# 12test

  1. list.sort(key=)

  2. pd.read_excel()
    读入excel中所有的sheet
    pd.read_excel('XXX.xlsx', sheet_name=None)
    得到一个dictionary, key为sheet name, value为各sheet读入的dataframe

  3. 给一个dataframe全员log10
    df.applymap(math.log10) (先import math)

  4. function最好不要return None
    因为如果你return的东西要放到if/else中去,None0或者空List等的效果是一样的,容易造成bug

  5. raise

def divide(a,b):
  try:
    return a/b
  except ZeroDivisionError as e:
    raise ValueError('What?') from e

divide(5,0)

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-9-b8e948d46537> in divide(a, b)
      2     try:
----> 3         return a/b
      4     except ZeroDivisionError as e:

ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-10-0a52e2eb64c8> in <module>
----> 1 divide(5,0)

<ipython-input-9-b8e948d46537> in divide(a, b)
      3         return a/b
      4     except ZeroDivisionError as e:
----> 5         raise ValueError('what?') from e
      6       
      7

ValueError: what?
  1. list.sort(key=)
    key传递一个函数,在sort之前对list中每个element调用
  2. list of tuple的排序
    先根据tuple的第一位element排序,再根据第二位...
test = [(1,2),(1,19),(1,3),(1,4),(0,3),(0,9),(0,10)]
test.sort()
test
[(0, 3), (0, 9), (0, 10), (1, 2), (1, 3), (1, 4), (1, 19)]

所以如果你有个list要排序,但是有一群特殊分子需要安排到前面去,可以先把特殊分子抽出来做成(0,x),其他的为(1,x),根据80条来设置。然后排序就可以把特殊分子排列在前面了。

  1. subprocess输入input
    subprocess见零碎的内容(一)43条
p = subprocess.Popen('XXXX',shell=True,stdin=subprocess.PIPE,
                     stderr=subprocess.PIPE)
stdout,stderr = p.communicate(input='XXX\nXXXX\nXXXXX')
# 多个Input用\n分开
  1. index name
  1. tqdm
    在jupyter notebook/lab 中使用tqdm, import这个比较合适
from tqdm import tqdm_notebook as tqdm
for i in tqdm([1,2,3,4]):
  ....
  1. 把某一个index提取出来成string,而不是Index object
    df.loc[df['col']==i,:].index.tolist()[0] #这里只有一个element

  2. dataframe筛选出某一种dtype的columns
    先看一下有几种dtypes:
    df.dtypes.value_counts()
    然后select
    df.select_dtypes(include=['XX','XXX'])

  3. 缺失值填充 missing value imputation

from sklearn.impute import SimpleImputer,KNNImputer
# 用KNN对numeric values填充
imputer_n = KNNImputer(n_neighbors=2,weight='uniform')
imputer_n.fit_transform(df)

# 用most frequent对categorical填充
imputer_c = SimpleImputer(strategy='most_frequent')
imputer_c.fit_transform(df)
  1. 有else的list comprehension
    ["Even" if i%2==0 else "Odd" for i in range(10)]

  2. multi-index的melt (long --> wide)

df
   ID gp     value gp2
0   1  a  0.708910  a1
1   2  a  0.273727  a1
2   3  a  0.161171  a2
3   4  a  0.920273  a2
4   5  b  0.147851  b1
5   6  b  0.957274  b1
6   7  b  0.421100  b2
7   8  b  0.807547  b2

df_mean = df.loc[:,['gp','value','gp2']].groupby(['gp','gp2']).mean()
df_mean
           value
gp gp2
a  a1   0.491318
   a2   0.540722
b  b1   0.552562
   b2   0.614323

pd.melt(df_mean.reset_index(),id_vars = ['gp','gp2'])
  gp gp2 variable     value
0  a  a1    value  0.491318
1  a  a2    value  0.540722
2  b  b1    value  0.552562
3  b  b2    value  0.614323

90.用pandas打开excel
在python3环境里,即使安装了openpyxl也无法打开
需要 pd.read_excel(XXXX, sheet_name= 'XXX', engine='openpyxl')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容