Bootstrap

pandas常用语法总结

pandas读取数据库中的数据

import pandas as pd
from sqlalchemy import create_engine

con = create_engine('mysql+pymysql://user:password@host:3306/database?charset=utf8')
pd.read_sql(query_sql, con)

两个DataFrame纵向合并

df,data都为DataFrame
df.append(data, sort=False)

两个DataFrame横向向合并

df,data都为DataFrame
pd.merge(data, df, on='id') # 根据id进行合并

df_new = pd.merge(df1, df2, left_on=['df1字段1', 'df1字段2'], right_on=['df2字段1', 'df2字段2'])
df某列字段中有字典,把字典转成列,再与df合并,我这里的字段是dongmi_keywords
df_final = pd.concat([df, df['dongmi_keywords'].apply(pd.Series)], axis=1).drop('dongmi_keywords',axis=1)
print(df_final)

删除重复项

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
df = df.drop_duplicates(['name'], keep='first')

subset : 指定列名,根据列名删除重复项,默认情况下使用所有列
keep: {'first', 'last', False} 默认保留第一项,当keep=False时,则是不重复的项
inplace : True/False, 默认 False 
是直接在原来数据上修改还是保留一个副本

查看多列数据是否重复

df.duplicated(subset=['字段名称1','字段名称2'])  返回的值是True/False

取出df数据不在df1中的数据

df[~df['name'].isin(df1['name'])]
根据字段name判断,取出df数据不在df1中的数据

取出df指定字段数据在 [‘自定义数据1’, ‘自定义数据2’] 中的数据

df[df['指定字段'].isin(['自定义数据1', '自定义数据2'])]

DataFrame行列转置

pd.DataFrame(a).stack().sort_values(ascending=False).reset_index()  
#  .stack()用于行列转置,因为自己的需求需要对值进行排序用了sort_values
#  .reset_index()重置索引

DataFrame对数据值排序

DataFrame.sort_values(by=##’,axis=0,ascending=True, inplace=False, na_position=‘last’)

by:指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis:若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending:是否按指定列的数组升序排列,默认为True,即升序排列
inplace:是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position:{‘first’,‘last’},设定缺失值的显示位置

遍历DataFrame中的每一行数据

for indexs in data.index:
    print('indexs======>', indexs)
    print('pubDate==>', data.iloc[indexs])
    #如果要修改其中某一个字段的值
    d_index = list(data.columns).index('要修改的字段名') # 所在位置的索引值
    data.iloc[indexs, d_index] = 要修改为的值 
    print(data)  # 此时的data已经是修改后的数据

某个字段转换类型为字符串或列表

df[指定字段].apply(str)  # list

按指定字段分组

df.groupby(指定字段)

某一列转换类型或执行其他操作可以与lambda匿名函数、自定义函数进行结合

举例
1.lambda匿名函数结合
	df[指定字段].apply(lambda x: str(x) if isinstance(x, list) else x)
2.与自定义函数结合
	def time2stamp(timestamp, dt=''):  # 时间戳转日期函数
	    if not timestamp is np.NaN:
	        dt = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(timestamp) / 1000))
	    return dt	
	df['日期字段'].apply(time2stamp)  # 可以应用自己的函数,选择某列字段进行应用,用法相同
3.lambda匿名函数、自定义函数结合
	def common(arg):
		'''可以写自己的业务逻辑'''
	    score = None
	    if arg:
	        if float(arg) > 0:
	            score = 1
	        else:
	            score = 0
	    return score
	df.apply(lambda x: common(x['指定字段']), axis=1)

两列数据直接进行运算

举例:
df['字段1'] / df['字段2']
df['指定字段'].sum()
df['指定字段'].count()
;