pandas day01

pandas

# 设置index 为日期
df.set_index('ymd',inplace=True)
# 查看index 
df.index
# 替换温度后面的℃
df.loc[:,'温度列名'] = df['温度列名'].str.replace('℃','').astype('int32')
# 查看列类型
df.types

使用loc 查询数据

# 查询单个值
df.loc['2018-01-03','温度']
df.loc['2018-01-01',['最高温度','最低温度']]

# 使用列表批量查询
df.loc[['2018-01-03','2018-01-03'],'温度'] # series

df.loc[['2018-01-03','2018-01-03'],['温度','最低温度']] # dataframe

# 区间范围查询
df.loc['2018-01-03':'2018-01-05','温度']

df.loc['2018-01-03','温度':'风向']

df.loc['2018-01-03':'2018-01-05','温度':'风向']

# 条件表达式进行查询
温度低于-10度的列表
df.loc[df['最低温度']<-10,:]
最高温度<30度, 最低>15度 ,晴天,天气为优
df.loc[(df['最高']<=30) & (df['最低']>=15),:]

# 调用函数查询
df.loc[lambda df:(df['最高']<=30) & (df['最低']>=15),:]

def query_data(df):
    return df.index.str.startwith('2018-09') & df['空气质量'] ==1
df.loc[query_data,:]

pandas 处理缺失值

1. isnull , notnull: 检测是否为空值,可用于df和series
2. dropna: 删除缺失值
    axis: 0行,1列,default0
    how: any 行列中包含任何的空值都删除,all所有值都为空才删除
    inplace: 为true修改档期df, false新的df
3. fillna: 填充控制
    value: 单个值或字典{列名:值}
    method: ffill 使用前一个不为空的值填充,bfill使用后一个不为空的值进行填充
    axis: 0行填充,1 列填充
    
 # 所有不为空的数据
df.loc[df['score'].notnull(),:]
# 删除全空的列
df.dropna(axis='columns',how='all',inplace=True)
# 删除全为空的行
df.dropna(axis='index',how='all',inplace=True)
# 分数为空的,填充为0
df.fillna({'score':0})
df.loc[:,'score'] = df['score'].fillna(0)
# 填充姓名 -- 前面的列填充
df.loc[:,'name'] = df['name'].fillna(method='ffill')

SettingWithCopyWaning 报警解决

# 替换摄氏度
df.loc[:,'温度'] = df['温度'].str.relplace('℃','').astype('int32')
# 筛选三月数据 -- warning!!!!! 
condition = df['ymd'].str.startwith('2018-03')
df[condition]['温差'] = df['高温'] - df['低温']
## 原因
df[condition]['温差']
1. 筛选出 子df 
2. 子df 相减
df.get(condition).set('温差') 
链式操作,get得到子df 可能是view, 也可能是copy 

# !! 重要
pandas df 的修改和写操作,只允许在源df上进行,一步到位

# 解决
1. get+set 两步,改成set 一步
df.loc[condition,'温度'] =  df['高温'] - df['低温']

2. copy 第一步结果
new_df = df[condition].copy()
new_df['温差'] = df['高温'] - df['低温']

index 的用途

1. 用index 查询数据
df.set_index('userid',inplace=True,drop=False) # drop false 保留userid
# 查询用户id=500
df.loc[df['userid'==500]].head()
df.loc[500].head()
2. index 提高查询性能
index如果唯一,哈希表优化, o(1)
index不唯一, 二分法 O(logN)
index 随机, 全表 O(N)
3. index 自动对齐
如果加减运算
s1+s2 索引对自动对齐进行加减
4. index 强大的数据结构支持
CategoricaIIndex, 基于分类数据的index, 提升性能
MultiIndex, 多维索引,用于groupby 多维聚合后结果
DatetimeIndex, 时间类型索引,强大的日期时间方法支持

其他

df['amount'].value_counts()


# 添加月份和年份
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
原文地址:https://www.cnblogs.com/Afrafre/p/15685918.html