在注释中的路径不能使用 \ ,只能用 \\ 或者 / ,否则执行的时候还是会报Unicode 编译错误
函数和类的注释放在函数和类下面
def abe():
"""
comment
"""
list(filter(lambda s: not s.startswith("_"), list0)) # 对 list 进行过滤,返回符合条件的 结果列表
#使用 regex 查找并返回有 orders 的 列表item ,返回只有 orders 的列表
#1
regex = re.compile(r'orders.')
ll = list(filter(regex.search, list0))
#2
ll = list(filter(lambda x:re.findall('orders',x), list0))
# remove not wanted characters
# 在一个List中去除另外一个List中已经存在的元素
l1 = ['b','c','d','b','c','a','a']
l2 = ['c']
l3 = []
[l3.append(i) for i in l1 if not i in l2]
print(l3)
Python StringIO及BytesIO包使用方法解析
set=set()
set.add(e)
str = ','.join(set) #set 转 str
长字符串换行
"""长字符串换行"""
sql_tbl = ("SELECT TABLE_NAME, CREATE_TIME, UPDATE_TIME FROM information_schema.tables "
"WHERE table_schema = 'test' AND Table_name LIKE '{}' "
"ORDER BY CREATE_TIME DESC LIMIT 10"
).format(table_wc)
"""删除文件"""
import os
if os.path.exists("demofile.txt"):
os.remove("demofile.txt")
else:
print("The file does not exist")
"""得到文件名"""
os.path.basename(out_path)
"""
py> china.xlsx
"""得到文件名,不含扩展名"""
filename = os.path.splitext(os.path.basename(path))[0].strip()
"""
py> china
"""rename"""
os.rename(src_path,dst_path)
"""得到代码所在文件和所在行"""
import sys
print(f"代码所在文件 = {__file__}"
print(f"代码所在行号 = {sys._getframe().f_lineno}")
导入其他目录下的 py 文件
import sys
sys.path.append(r"C:\\Users\\XXX\\MyPy\\Dir")
import file as mf
pandas 教程 - 盖若
df.shape[0] # 返回行数
df = df.drop(0) # 删除第一行
df1 = df.drop(labels='abc', axis=1) # 删除 列名=abc 的列
"""删除第一列"""
df = df.iloc[:, 1:] # 获得1开始的所有列
# 删除满足条件的行:
# 保留第一列中不是 15444 的所有行
# 删除第一列中 数值 为 15444 的所有行
df1 = df[ df[0] !='15444'] # index 仅用于 Int 列 ?
# 删除字段CountryName = 'Total' 的所有行
dfa = dfa[ dfa['CountryName'] !='Total']
# 删除含有 abc = -1 的所有行
df = df[ ~df['abc'].isin([-1])]
"""删除Nan 的行和列"""
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# axis = 0 , index; axis = 1, column
dfr = dfr.drop(len(dfr)-1,axis=0) # 删除最后一行
"""直接得到新的DataFrame"""
df = df [['col1','col2']]
df.drop(df.tail(n).index) #从尾部去掉 n 行
df.dorp(df.head(n).index) #从头去掉 n 行
# 在数据处理过程中用到了除法,并且出现了除数为0,导致出现inf,而数据库不支持写入该值
df_d = df_d.replace([np.inf, -np.inf], 1) # 第一次出现 - 1
df_d = df_d.replace([np.inf, -np.inf], np.nan) # 空值 ,上述代码将处理结果中的正无穷和负无穷都替换为空值,最后写入到数据为中的为null值
df_d.fillna(0) # 替换 NaN 为 0
h[0] = h[0].astype('str').apply(lambda x:re_sub(r'.0','',x))
# change to str and replacy '.0' with ''
def re_sub(pattern, value, text):
return re.sub(pattern,value,text)
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True,ignore_index=True)
"""
代码中subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。
默认值为subset=None表示考虑所有列。
keep='first'表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,
分别表示保留最后一次出现的重复行和去除所有重复行。
Flase 可以用于取差集
inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。
ignore_index:如果为True,则重新分配自然索引(0,1,…,n - 1)
"""
df2 = df1.drop(index=df1.index) """清空数据"""
df = pd.read_csv('D:/Temp/XYZ.csv')
df = pd.read_excel('D:/Workspace/MyPy/TEST/words_train/toTrain.xlsx',hearder=1)
df = pd.read_sql_query(sql,engine)
# header 指定表头所在行,默认0 初始值
df_r.to_csv() #写入CSV
df_r.to_excel() # index = False 写文件时,不输出Index列
dtypedict = {
'Name': NVARCHAR(length=255),
'ID': INTEGER(),
'Address': NVARCHAR(length=512),
'Phone Number': NVARCHAR(length=128),
'Country': NVARCHAR(length=128),
'Country Code': NVARCHAR(length=4),
'Category': NVARCHAR(length=8),
'Zip Code': NVARCHAR(length=62),
}
df.to_sql() # if_exists: append | replace ; dtype:= dict
to_sql 尽量定义dtype 加速 mysql 的写入
# Create a dataframe with Data
import pandas as pd
dict_data = {
'name':["Li Lei","Han Meimei","Tom"],
'score' :[95,98,92],
'gender':['M','F','M']
}
df_data = pd.DataFrame(dict_data)
print(df_data)
# Create a dataframe with Column only
df = pd.DataFrame(columns = ["ebayno", "p_sku", "sale", "sku"]) #创建一个空的dataframe
# Tuple to Datafrom
df1 = pd.DataFrame(rows)
# 新建一行
dict_new_row = [{'aaa':'123', 'id':'322','匹配字段':'all'}]
df_row = pd.DataFrame(dict_new_row)
# 多行用 list 中多个 dict
# read mysql get dataframe
args['connStr'] = 'mysql+mysqlconnector://root:{}@{}:3306/{}'.format(MysqlPW,MysqlHost,MysqlDB)
df = pd.read_sql_query(sql,engine/ConnStr)
# 将data写入数据库,如果表存在就替换,将data的index也写入数据表,写入字段名称为id_name
data.to_sql('table_name',con='engine',chunksize=10000,if_exists='replace',index=True,index_label='id_name',dtype=dtypes)
# dtype 定义数据格式
# 将data写入数据库,如果表存在就追加
data.to_sql('table_name',con='engine',chunksize=10000,if_exists='append')
# 将data写入数据库,如果表存在就替换,指定col_1的字段类型为char(4)
data.to_sql('table_name',con='engine',chunksize=10000,if_exists='replace',dtype={'col_1':'CHAR(4)'}, index=Ture, index_label=['abc'])
"""
如果data数据量大,需要设置合理的chunksize值,这和数据库缓存大小有关,
可以设置在50000-10000,如果提示数据库连接超时错误,就将size值调小。
index:Write DataFrame Index as a column
index_label: 设置 label for index column(s). 当上一个参数index为True时,设置写入数据表时index的列名称。
index 也写入数据表,写入字段名称为abc
"""
# 使用 sqlalchemy 加入主键Key
from sqlalchemy import create_engine
import sqlalchemy
with engine.connect() as con:
con.execute('ALTER TABLE tmpTbl ADD PRIMARY KEY (`tmpId`)')
DataFrame.insert(loc, column, value, allow_duplicates=False) # 插入一列
df.insert(loc=2, column='c', value=3) # 在第三列,插入值全为3的c列
jobs = ['student','AI','teacher']
df['job'] = jobs #默认在df最后一列加上column名称为job,值为jobs的数据
pandas insert spec doc
new_row = {'name':'Geo', 'physics':87, 'chemistry':92, 'algebra':97}
#append row to the dataframe
df_marks = df_marks.append(new_row, ignore_index=True)
### FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
df1.append(df2) """相当于pd.concat([df1, df2])"""
print(dataframe.dtypes) #查看column 的数据类型
#查看字段名字和类型
for column in df: print(column,',type(column):',type(column))
# 进行数据表格的数据类型转换需要用到数据类型转换函数df["列名称"].astype("类型名称”)
df["A"]=df["A"].astype("int")
# a lot of long int when loaded by Pandas are treated as float, we need to change back to int for the join.
df_pe['A'] = df_pe['A'].apply(lambda x:x.replace(',','')).astype(float) # 转换有逗号,的数值为 float
"""转成 list"""
df['a'].to_list() # 把字段值转为list
"""转成 没有column name 的 tuple list"""
df.to_records(index=False).tolist()
python - Pandas convert dataframe to array of tuples - Stack Overflow
dfp['creationMonth'] = dfp[columnNames['creationDate']].dt.strftime('%Y-%m')
dfp['creationWeek'] = dfp[columnNames['creationDate']].dt.strftime('%Y-%W')
df['thing'] = df['thing'].str.upper() #将列的所有值转换成大写
官方:
Purely integer-location based indexing for selection by position. --iloc
Access a group of rows and columns by label(s) or a boolean array. --loc
————————————————loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
iloc函数:通过行号来取行数据(如取第二行的数据)
注:loc是location的意思,iloc中的i是integer的意思,仅接受整数作为参数。
"""iloc始终坚持一个原则:iloc是基于position, index 进行索引的! 按照 ROW """
df0.iloc[0] """得到第一行的数据"""
"""打印前10行数据 == df.head(10)"""
for i in (0,10):
print(df_ka.iloc[0:i:1])
df0.iloc[:,8:] """得到第8列到最后的所有列"""
dfa[-1:] # [-1:] 得到最后一行df
df.head(N) """得到起始N行"""
df.tail(N) """得到最后N行"""
df = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)
for i,row in df_rt2m.iterrows():
v0 = row['aaa']
v1 = row['bbb']
"""得到 p==0 并且 pu=1 的所有数据"""
"""()括号不能省略,否则报错"""
dfu = dfu[ (dfu[p]==0) & (dfu[pu]==1) ]
"""得到 abc 列 中有 -1 值的所有列 """
df = df[df['abc'].isin([-1])]
"""查找满足条件的字符串,支持Regex"""
dftmp = df.loc[df['Name'].str.contains(filter[f][c]),:]
""" 建立一个Array """
filter_list = [12, 14, 15]
#return only rows where points is in the list of values
df[df.points.isin(filter_list)]
df2=df.dropna(axis=0, how='all', thresh=None, subset=None, inplace=False) #只有全部为空才回被删除
df.columns=['A','B'] #rename the dataframe column of every column, when we don't know exactly the column name
df = df.rename( columns={ 'A':'aa', 'C':'cc' }) # 对Column 重命名
fields = df.columns.values #得到列名
""" 将 PD.seriesName 转为 pd.columns 才能对列重命名 """
df = pd.DataFrame({"a":np.arange(10),
"b":np.random.choice(["A","B"],10)})
avg = df.groupby("b", sort=False)["a"].mean().reset_index(name="mean")
avg = df.groupby("b", sort=False)["a"].mean().reset_index().rename(columns={"a":"mean"})
# 在计算聚合后得到的 series, 可以使用 reset_index() 转为 Column
avg = df.groupby("b", sort=False, as_index=False)["a"].mean()\
.reset_index()\
.rename(columns={"a":"mean"})
df = pd.merge(df_search,df_pe, on=['col1','col2'], how='outer' , suffixes=('',''))
# out join 数据左右连接,suffixes 为合并后的左表和右表的后缀
"""按列合并"""
df = pd.concat([df0,df1])
df.reset_index(drop=False) # False - transform the Index to normal fields, True - Drop the Index
df0 = df0.sort_values(by=[column1], ascending=[False])
# 设置索引字段
df_cx.set_index('Tag',inplace=True)
# 通过索引字段中的值,得到其相应其他字段的值
n = df_cx.loc[k,'Name'] # retrun value
n = df_cx.loc[k,['Name','Explain']] # retrun DataFrame
df_f['sum'] = df_f.apply(lambda x: x.sum(), axis=1) # 对所有的agg以后的数值列求和,插入一列
df['sum'] =df['2020-03-30'].add(df['2020-03-31'], fill_value=0) #按列相加,NaN 的地方 用 0 填充
df['avg'] = df.apply(lambda x: x['bookings'] / int(N) , axis=1) # 整列 除 N,作为新的一列
len(df) # dataframe 行数
df.size # dataframe 单元格数,不含Index
df['sum'] = df.sum(axis=1) # sum all columns in one row. 字符串自动连接
df_group_r_errors = df[['Data.Request','_type']].groupby(by=['Data.Request']
, as_index=True)
# as_index - groupby 的字段作为Index 字段,方便日后根据 Index 进行 concat
# by - 分组 Aggregate 的字段列表
df_r_count = df_group_r_errors.count() # count() - 分组汇总,每组中的个数
""" .sum() - 总和;.mean() 均值 """
df0 = dataFrame.groupby(['clientName']).agg({'GMV':['sum'],'bookings':['sum'],'COST':['sum']})
df0.columns=['GMV','bookings','cost'] #rename the datafram series
df0 = df0.reset_index(drop=False)
"""对一个字段求多个group 后的 统计值,并且重名字段名"""
df_result = df.groupby('col1').agg(
speed_avg=('speed', 'mean'), speed_min=('speed', 'min'), speed_max=('speed','max')
,vol=('Id', 'size'),spread=('speed',lambda x:max(x)-min(x)
).reset_index()
""" groupby 后,filter所需的值 """
filter = df.groupby('Team').filter(lambda x: len(x) >= 3)
pd.isnull(row['a']) # 校验是否为空或者nan
pd.notnull(row['a']) # 校验是否不为空或者nan
Pandas对于CSV的简单操作
python – 在列表中通过正则表达式过滤字符...
Pandas之超好用的Groupby用法详解
Python: pandas中iloc, loc和ix的区别和联系
pandas 查询筛选数据 | pandas 教程 - 盖若
pandas DataFrame.to_sql() 用法
pandas数据表处理之数据的分类与汇总(2)
pandas数据汇总
Python3之接口类(InterfaceClass)浅谈
pandas dropna()移除空行
从pandas日期列中提取年份与月份的三种方法