#两列互换 In [35]: cond = df.a > df.b In [36]: df.loc[cond, ['a', 'b']] = df.loc[cond, ['b', 'a']].values In [37]: df Out[37]: a b 0 1 3 1 2 4 2 0 2 3 1 6
https://www.cnblogs.com/oklizz/p/11766788.html pandas速查手册
https://www.pypandas.cn/docs/getting_started/tutorials.html#%E5%AE%98%E6%96%B9%E6%8C%87%E5%8D%97 官方指南中文版
df.drop(df.columns[0:3], axis=1, inplace=True) # 删除前3列
df.drop(df.index[0:3], inplace=True) # 删除前3行
df[df.isna().values] 现实空值
df.loc[:,(df != 0).all(axis='index')] 去除全为0的列
df[df[2].str.len()==11] 查找手机号是11位的人
dfmeiwen[4].value_counts() 计数出现次数
df[2]=df[2].astype('str') df.dropna(thresh=10) 删除空值 超过十个空值才删 ANY 只要有就删除
df.drop_duplicates(["k1"]) 删除重复行 默认保留第一行
df.drop_duplicates(["k1","k2"], take_last=True)
df=df.reindex([x for x in range(20)]) 重新设置索引 索引值如果多 就生成NAN 返回一个DATAFRAME 所以要用df再接受一下
df.loc[(df[7]>36)&df[3].str.contains('平顶山')].sort_values(by=7) df.loc[lambda df:(df[7]>36)&df[3].str.contains('平顶山')]
def ceshi(x):
return x[7]>36&df[3].str.contains('平顶山')
df.loc[ceshi] 这都是一样的结果
loandata[
'term'
]
=
loandata[
'term'
].
map
(
str
.strip)
去除两边空格loandata[
'term'
]
=
loandata[
'term'
].
map
(
str
.title)
转化大写 首字母def yujing(x):
if x[7]>36.7:
return '报警'
else:
return '正常'
df.loc[:,'温度情况']=df.apply(yujing,axis=1)
df[df['温度情况']=='报警']
df.sort_values(by=17) 排序
df.loc['a', :] df 后面是标签索引 df.loc[df[11]=='工作'] df[df[11]=='工作'] 两个结果相同
#pandas 链接MYSQL数据库 import pandas as pd from sqlalchemy import create_engine engine=create_engine('mysql+pymysql://username:password@ip:port/database') sql='''select id,dataid,plateno,lane_id,whole_weight,limit_weight,whole_over from oses_over2020 limit 1000''' df=pd.read_sql_query(sql,engine)