Python常用知识整理 (一)

1. 字符串处理

字符串和时间的相互转化

  • 字符串转为时间
from datetime import datetime
time = datetime.strptime("2018-10-10 20:50:19",'%Y-%m-%d %H:%M:%S')
  • 时间转为字符串
from datetime import datetime,timedelta
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#输出昨天的日期
yesterday = (datetime.now() - timedelta(1)).strftime('%Y%m%d')

将表达式和变量作为字符串输出:print + f

import time
t_init = time.time()
time.sleep(1)
name = "processing"
#将变量和表达式放在{}中
print(f"{name} done in {time.time() - t_init:.2f} secs")

  • 上文的 .2f 是对数字进行格式化,示例:
#将数字保留两位小数输出
print("{:.2f}".format(3.1415926))
print(f"{3.1415926:.2f}")

python格式化输出

  1. %方法
    %f 保留小数点后面六位有效数字
    %.3f 保留3位小数位
    %s 字符串
  • 如果要输出几个,这么写:
print("%d:%s" %(x,y))
  1. format方法

字符串和dict的相互转化

  • json.loads() 将字符串转化为列表
  • json.dumps() 将列表转化为字符串

字符串匹配 - find函数

string0 = "hello"
print(string0.find('a')) #如果找不到则返回 -1
print(string0.find('h')) #返回index

字符串拆分

string.strip().split('\t')

计算字符串中字符出现的频率

from collections import Counter
Counter("Hello World!")

大型字符串连接用join比较快

str1,str2,str3 = 'test','string','collections'
print(" ".join([str1,str2,str3])) #注意join里面是个列表

中文字符串的显示

读入时进行utf8解码,之后print就可以显示中文字符

record = []
for line in arrayOLines:
    line = line.strip()
    listFromLine = line.split(',')
	record.append(listFromLine[0].decode('utf8'))
for i in range(len(record)):
    print(record[i] + '\n')

2. numpy二维矩阵

  • 生成3*3的二维矩阵(取值全为1)
import numpy as np
a = np.ones((3,3))
print(a)
  • 二维数组乘积(注意numpy里的二维数组和矩阵的差异)
a = np.ones((3,3))
b = np.ones((3,3))
print(a*b)   #对应位置相乘
print(a.dot(b))  #矩阵乘
  • 返回一个和a形状相同但取值全为0的数组
c = np.zeros_like(a)
  • 缺失值填充 numpy.nan
import numpy
value1 = numpy.nan

3. Pandas中DataFrame相关知识

  • 构建一个DataFrame
import pandas as pd
from pandas import DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 2002, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame1 = DataFrame(data)
  • 获取DataFrame的行数和列数
frame1.shape
Out[173]: (5, 3)
print(frame1.shape[1])   #列
print(frame1.shape[0])   #行
  • 按行求和添加新列
#按行进行计算
from pandas import DataFrame
data = {'pop1': [1, 2, 3, 4, 5],'pop2': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame1 = DataFrame(data)
#axis=1表示按行计算
frame1['Col_sum'] = frame1.apply(lambda x: x.sum(), axis=1) 
  • 按某一列去重,比如按 ‘year’ 这一列去重
data_unique = frame1.drop_duplicates(['year'])
  • 显示列名
tmp = frame1.columns.values.tolist()
print(tmp)
  • 列表里包含多个格式相同的字典-可直接转化为DataFrame
data = pd.DataFrame(result_list)   #多行字典可以直接转化为数据框
data['name'] = a #可以再新加一列
  • DataFrame 输出到excel
data.to_excel('结果.xlsx')

4. 读入和存储数据

  • 读取csv txt 格式数据:
import pandas as pd
data = pd.read_csv("/Users/zi/Desktop/detail.txt",sep='\t')
  • 用 with open 打开文件,会在合适时候自行关闭文件
with open(f, 'r') as file:
    for line in file:
        pars = line.strip().split('\t')
  • 写入文件
result = open('results.txt', 'w')
# 将一个字典中的主键写入txt文件中
for key, value in wordCount:
    result.write('%s\n' % key)    #注意这里采取的%s形式
result.close()
  • 将文本文件的结果存到numpy矩阵中
filename = 'data.txt'
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = np.zeros((numberOfLines,59))

index=0
for line in arrayOLines:
    line = line.strip()
    listFromLine = line.split('\t')
    returnMat[index,:] = listFromLine[1:60]
    index+=1
returnMat.shape

5. 字典相关

  • 如果键不在字典内,可能会报错,有两种处理方法
if 'key1' not in dict0:   #取值前加一个判断

或者用:

result = dict0.get('key1',0) #指定键不存在时的值
  • 默认的字典不记录键值对的添加顺序
#记录下键值对添加的顺序
from collections import OrderedDict
x = OrderedDict(a=1,b=2,c=3)

6. 其他

  • all() 和 any()
x = [True,False,True]
if any(x):
    print("at least one true")
if all(x):
    print("not one False")
if any(x) and not all(x):
    print("at least one True and one False")
  • is 和 == 区别
# is: 两个对象内存空间是否一致
# ==:两个对象内容是否相同
  • 巧用列表推导式
numbers = [1,2,3,4,5,6,7]
evens = [x for x in numbers if x%2 == 0]
odds = [y for y in numbers if y not in evens]

还可以自定义函数:

def _change(x,y):
    return '%d:%s' %(x,y)

seq = ["one","two","three","four"]
print([_change(x,y) for x,y in enumerate(seq)])

['0:one', '1:two', '2:three', '3:four']
  • 巧用map和lambda函数
t = [1,2,3]
y = map(lambda x:x+1,t)
print(list(y))   #注意python3中调用了map函数的结果需要用list转换

map的另一个示例:对于输入的字符串批量处理成数字:

x,y = map(int,input().split())
  • 设置随机数种子
import random
random.seed(12345)
  • 绘图时图形不显示,多运行一句:
plt.show()
  • .py 文件执行
if __name__ == "__main__":
    handle_data()
  • sh模块
import sh
sh.mkdir('newfolder') #新建文件夹
sh.touch('newfile.txt') #新建文件
  • 巧用zip打包
keys = ['a','b','c']
vals = [1,2,3]
zipped = dict(zip(keys,vals))
  • 列出当前目录下所有文件的文件名
import os
[d for d in os.listdir('.')]

把list中的True映射为1,False映射为0

array = np.array([True, False])
array.astype(int)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值