pandas基础2
Pandas操作
一、DataFrame
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=None, fastpath=_NoDefault.no_default)[source] class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)[source]
df.shape # (100, 6) 查看行数和列数 df.info() # 查看索引、数据类型和内存信息 df.describe() # 查看数值型列的汇总统计 df.dtypes # 查看各字段类型 df.axes # 显示数据行和列名 df.columns # 列名 df.head() # 查看前5条,括号里可以写明你想看的条数 df.tail() # 查看尾部5条 df.sample(5) # 随机查看5条
python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
https://www.cnblogs.com/chenhuabin/archive/2019/03/06/10485549.html
二、数据筛选
2.1 选择行、列
#选择列 df['userid'] df.userid df[['team','userid']] # 数组,表示多列 df.loc[:, ['team', 'Q1']] # 和上一行效果一样 #选择行 df[df.index == 'Liver'] # 用指定索引选取 # 指定姓名 # 用自然索引选择,类似列表的切片 df[0:3] # 取前三行 df[0:10:2] # 在前10个中每两个取一个 df.iloc[:10,:] # 前10个 #指定行和列 df.loc['Ben', 'Q1':'Q4'] # 只看Ben的四个季度成绩 df.loc['Eorge':'Alexander', 'team':'Q4'] # 指定行区间
df.loc[x, y]是一个非常强大的数据选择函数,其中x代表行,y代表列,行和列都支持条件表达式,也支持类似列表那样的切片(如果要用自然索引,需要用df.iloc[])。
2.2 条件选择
# 单一条件 df[df.Q1 > 90] # Q1列大于90的 df[df.team == 'C'] # team列为'C'的 df[df.index == 'Oscar'] # 指定索引即原数据中的name # 组合条件 df[(df['Q1'] > 90) & (df['team'] == 'C')] # and关系 df[df['team'] == 'C'].loc[df.Q1>90] # 多重筛选
2.3 排序
raw_df.sort_values(by=['follow_num', 'register_num'], ascending=[True, True], inplace=True)
2.4 分组聚合
df.groupby('team').sum() # 按团队分组对应列相加 df.groupby('team').mean() # 按团队分组对应列求平均 # 不同列不同的计算方法 df.groupby('team').agg({'follow_num': 'sum', # 总和 'register_num': 'count', # 总数 'Q3':'mean', # 平均 'Q4':'first' #保留第一个 }) df.groupby('team').sum().T # 数据转换
df.groupby('team').sum().stack()
df.groupby('team').sum().unstack()
2.5 添加修改
df.insert(2, '列名', 'content') df.append #追加新行 pd.concat([s1,s2]) #
df.pop('user_id')
pd.concat(objs, axis=0, join='outer',ignore_index=False, keys=None,levels=None, names=None, sort=False,verify_integrity=False, copy=True)
axis:连接轴的方法,默认值是0,即按列连接,追加在行后面。值为1时追加到列后面。
2.6 高级筛选
# df.query()、 df.eval()、df.filter() # df.where()、 np.where(df条件,'','') np.where(df>=60, '合格', '不合格'). #条件,条件为真的值,条件为假的值
三、迭代对象&函数应用
3.1 按行迭代
df.iterrows()、df.itertuples()
与df.iterrows()相比,df.itertuples()运行速度会更快一些,推荐在数据量庞大的情况下优先使用
3.2 按列迭代
df.items()、df
#按行迭代 for index, row in df.iterrows(): print(index, row['name'], row.Q1) # df.iterrows()是最常用、最方便的按行迭代方法。 for row in df.itertuples(): print(row) # 按列迭代 for label, ser in df.items(): print(label) for column in df: print(column)
3.3 函数应用
df.pipe(<函数名>, <传给函数的参数列表或字典>)
pipe():应用在整个DataFrame或Series上。
apply():应用在DataFrame的行或列中,默认为列。
applymap():应用在DataFrame的每个元素中。
map():应用在Series或DataFrame的一列的每个元素中。
df.agg({'Q1' : ['sum', 'min'], 'Q2' : ['min', 'max']})
四、数据形式变化
1、groupby
df.groupby(by=None, axis=0, level=None,
as_index: bool = True, sort: bool = True,
group_keys: bool = True, observed: bool = False,
dropna: bool = True,
) -> 'DataFrameGroupBy
df.groupby('team').first()
df.groupby('team').last()
df.groupby('team').quantile()
2、agg
3、数据分箱
pandas.cut:根据指定分界点对连续数据进行分箱处理。
pandas.qcut:根据指定区间数量对连续数据进行等宽分箱处理。所谓等宽,指的是每个区间中的数据量是相同的。
pd.cut(df.Q1, bins=[0, 60, 100])
五、lambda函数
lambda [arg1 [,arg2,.....argn]]:expression
lambda是匿名函数,有输入和输出
expression:参数表达式,表达式只能是单行的,只能有一个表达式。
lambda x, y: x*y # 函数输入是x和y,输出是它们的积x*y lambda:None # 函数没有输入参数,输出是None lambda *args: sum(args) # 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算) lambda **kwargs: 1 # 输入是任意键值对参数,输出是1
lambda函数用法:
1、将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
add = lambda x, y: x+y
2、将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换
time.sleep=lambda x: None
time.sleep(3)
3、将lambda函数作为参数传递给其他函数。
lambda用法之高阶函数
map(function, iterable, ...)
reduce(function, iterable[, initializer])
https://blog.csdn.net/PY0312/article/details/88956795