python 实用小技巧 python 常用 time, datetime处理

1. 列表

#以下三式等价
c = (a>b and a or b)   
c = a if a>b else b
c = [b, a][a>b]

  

2. 嵌套列表展开,嵌套方法可实现多层列表展开

a=[[1,2],[3,4],[5,6]]
print([j for i in a for j in i])  #列表生成式

sum(a, [])  #求和函数

from functools import reduce
reduce(lambda x,y: x+ y, a)  #工具函数

from itertools import chain
print(list(chain(*a))) 

import itertools
print(list(itertools.chain.from_iterable(a)))

t=[]
[t.extend(i) for i in a]
print(t)

#递归的方法比较容易理解
#在stackoverflow看到大牛的列表生成式版本
func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x]

#递归自定义
def expand_list(nested_list):
    for item in nested_list:
        if isinstance(item, (list, tuple)):
            for sub_item in expand_list(item):
                yield sub_item
        else:
            yield item

  

3. 工具函数

# map 把函数 f 依次作用在 list 的每个元素上,得到一个 iterator 并返回。
print(list(map(format_name, ['adam', 'LISA', 'barT'])))

# reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。reduce()还可以接收第3个可选参数,作为计算的初始值。
from functools import reduce
print(reduce(f, [1, 3, 5, 7, 9], 100))

# filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的iterator。
print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17])))

#zip()参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入参数的长度不同时,zip能自动以最短序列长度为准进行截取,获得元组
[i for i in zip(['a','b'], (3,4,5))]

  

4. 时间

python 常用 time, datetime处理

Python处理时间 time  &&  datetime 模块

import time 
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

  

5. 随机数

import numpy as np
np.random.rand(10)
np.random.randn(10)
np.random.randint(10, size=10)
np.random.shuffle(x)    #类似洗牌,打乱顺序
np.random.permutation(citys.index)   #返回一个随机排列

import random
random.random()   #只产生一个
random.randint(1, 10)
random.uniform()
random.randrange()   #[random.randrange(0,9) for i in range(30)]
random.shuffle(a)   #a=[1,2,3], 直接对a的值修改

  

6. dataframe迭代(iteritems, iterrows, itertuples, apply

import pandas as pd
df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])

[(i,j) for i,j in df.T.iteritems()]

[(i,j) for i,j in df.iterrows()]
[(i, j['c1'], j['c2']) for i,j in df.iterrows()]

[(getattr(row, "c1"), getattr(row, "c2")) for row in df.itertuples(index=True, name='Pandas')]

def valuation_formula(x, y):
    return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['c1'], row['c2']), axis=1)

  

7. dataframe修改索引

a.rename(columns={'A':'a', 'C':'c'}, inplace = True)   #dataframe修改列名
a.index = ['1', '2', np.nan]     # dataframe修改索引

  

8. 读写文件

  读文件

import pandas as pd
import os

excel_data = pd.read_excel("./xx/xx.xlsx")
csv_data = pd.read_csv("./xx/xx.csv")
txt_data = pd.read_table("./xx/xx.txt")
json_data = pd.read_json("./xx/xx.json")
print('excel数据', os.linesep, excel_data)

  写文件

df.to_csv("./xx/xx.csv", index=False, encoding='utf-8')
df.to_excel("./xx/xx.xlsx") #utf_8_sig, gbk, gb2312, gb18030
df.to_dict(orient = 'records')   #orient默认dict(字典套字典), 还可 ‘list’, ‘series’, ‘split’, ‘records’, ‘index’

  其他文件的读写

  python高手之路python处理excel文件

import xlrd

file_path = r'F:/test.xlsx'   #路径前加 r,读取的文件路径
file_path = file_path.decode('utf-8')   #文件路径的中文转码

data = xlrd.open_workbook(file_path)   #获取数据
table = data.sheet_by_name('Sheet1')   #获取sheet

nrows = table.nrows  #获取总行数
ncols = table.ncols  #获取总列数
rowvalue = table.row_values(5)  #获取一行的数值,例如第5行
col_values = table.col_values(6)  #获取一列的数值,例如第6列
cell_value = table.cell(5,6).value   #获取一个单元格的数值,例如第5行第6列

  

9. 数据库文件读写

import pandas as pd
from sqlalchemy import create_engine, types

config = {db_flag : "mysql", host_ip : "127.0.0.1", host_port : 3306, db_name : "test", table_name : "aaa", user : "root", pawd : "root", charset : "utf-8"}
engine_config = '''mysql+pymysql://{user}:{pawd}@{host_ip}:{host_port}/{db_name}?charset={charset}'''.format(**config)
engine= create_engine(engine_config)
pd.read_sql_query(sql, engine)
conn = engine.connect()
df.to_sql(table_name, conn, if_exists='append', index=False)

  

  

猜你喜欢

转载自www.cnblogs.com/iupoint/p/11138798.html