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()