Pandas函数方法总结

旧街凉风 提交于 2020-02-11 18:59:07

构造Series

# 用list初始化Seires
s = pd.Series([7, 'Beijing', 3.14, -12345, 'HanXiaoyang'])
# pandas会默认用0到n作为Series的index,但是我们也可以自己指定index。
s = pd.Series([7, 'Beijing', 3.14, -12345, 'HanXiaoyang'], index=['A', 'B', 'C', 'D', 'E'])
# 我们还可以用dic来初始化Series,因为Series本来就是key-value的结构
cities = {'Beijing':55000, 'ShangHai':60000, 'Shenzhen':50000, 'Hangzhou':30000, 'Guangzhou':40000, 'Suzhou':None}
# name可以用作当Series组成DataFrame时的columnName
apt = pd.Series(cities, name='income')

索引和广播

numpy比list更适合做数据分析的原因:1.Series可索引,类似于dict,所以可以离散取值,可以进行条件判断索引,基于索引做计算;2.广播特性,所以还可以进行统计计算

# 记住传入的参数只能是一个对象,所以slice或者传入list
apt[ ['ShangHai', 'Shenzhen', 'Guangzhou'] ]
# 基于索引去做计算的
apt[1:] + apt[:-1]
# in判断index是否存在
print('Hangzhou' in apt)
# 这个特性可以用于DataFrame的条件索引,如df['v' in [a,b,c]]
df['value'].isin(['a','b','c'])
# apt['Chongqing'] 会报错,要使用get方法return None
print(apt.get('Chongqing'))
# apt['Chongqing'] 不OK的
print(apt.get('Chongqing'))

# 广播特性
3*apt
# 统计计算
apt.mean()

# 赋值
apt['Shenzhen'] = 70000
#条件赋值
apt[apt<=40000] = 45000
#条件赋值
apt[apt<=40000] = 45000

构造DataFrame

# 字典形式构造DataFrame
data = {'City':['Beijing','ShangHai','Guangzhou','Shenzhen','Hangzhou','Chongqing'],
        'year':[2017,2018,2017,2018,2017,2017],
        'population':[2100,2300,1000,700,500,500]
       }
# 可以自己设定columnName和indexName
pd.DataFrame(data, columns=['year','City','population'], index=['one','two','three','four','five','six'])

# Series构造DataFrame
df = pd.DataFrame({'apt':apt, 'cars':cars})
# 插入Series
df.insert(1, column='expense', value=expense, allow_duplicates=True)

# 读入DataFrame
nvda = pd.read_csv('pandas_part2_data/NVDA.csv', index_col=0, parse_dates=['Date'])
# 注意一开始就可以parse_date,设置sep='\s+'
# index_col是设置index为哪一列

DataFrame索引

# 高级函数loc和类似切片的方法
df.loc['Beijing':'Suzhou', ['apt','bonus']]
# 传入list的用法
df.loc[['Beijing','Suzhou'], ['apt','bonus']]
# 对列赋值
df.loc[:,'expense'] = 100000
df.fillna(method='ffill')

DataFrame基本信息

# 查看统计信息
df.describe()
# df.describe()可以直接提取分位数平均值等,不过用np.quantile()也可
# 查看Series的频率直方图
s.value_counts()
s.value_counts().to_frame()
# df['col'].value_counts中存在normalize,sort参数

分组/Groupby

# groupby分组之后你可以去做一些统计聚合操作
salaries.groupby('Name', sort=False).sum()
# 统计出现的频次
salaries.groupby('Name').size()
# 分组查看信息
salaries.groupby('Name').describe()
# groupby与agg协同操作
salaries.groupby('Name')[['Bonus','Salary']].agg([np.sum, np.mean, np.std, np.median])

# groupby与transform协同
def my_transform(x):
    return (x-x.mean())/x.std()
tranformed = nvda.groupby('year').transform(my_transform)

# groupby与apply协同
salaries.loc[:,'new_name'] = salaries['Name'].apply(lambda x: 'HanXiaoyang' if x=='han' else x)
# 如果是boss,返回工资+奖金,其他人返回工资
def my_fun(name, salary, bonus):
    if name=='BOSS':
        return salary+bonus
    else:
        return salary
# 注意赋值给Series要转化成list
salaries.loc[:,'my_s_result'] = list(map(lambda x,y,z:my_fun(x,y,z), salaries['Name'],salaries['Salary'],salaries['Bonus']))

salaries.loc[:,'my_s_result'] = salaries.apply(lambda x: x.Salary+x.Bonus if x.Name=='BOSS' else x.Salary, axis=1)

数据拼接

#行对齐去拼接
pd.concat([df1,df1,df1], axis=1)
#列对齐拼接
pd.concat([df1,df1,df1], axis=0)
# 表格链接
pd.merge(result, new_df2, on=['new_apts'], how='right')
# join基于index去合并数据的函数
df1.join(df4)

DataFrame删除null值

df.dropna(axis=0/1, how='all'/'any')

最后放上小抄

在这里插入图片描述
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!