目录
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格式化输出
- %方法
%f 保留小数点后面六位有效数字
%.3f 保留3位小数位
%s 字符串
- 如果要输出几个,这么写:
print("%d:%s" %(x,y))
- 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)