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

 

posted @ 2024-08-08 15:28  尘恍若梦  阅读(2)  评论(0编辑  收藏  举报