import pandas as pd
读取excel文件:
data = pd.read_excel("C:deldesktop111.xlsx",sheet_name="Sheet1")
读取csv文件:
data = pd.read_csv("Data_Path")
注意,由于python语言会将“”当作转义字符,因此在填写文件地址时,一定要将“”字符转换成“/”,特别是当出现下面这个报错的时候,那就是地址写错了!!!
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape
分组:groupby——参考:https://zhuanlan.zhihu.com/p/101284491
单一分组变量:例如根据公司进行分组
data.groupby("company")
多个分组变量:例如根据行业、年份进行分组
data.groupby(["industry","Year"])
得到的是DataFrameGroupBy object,为了方便查看,可以将其转换成list(data)
groupby分组之后,就能够对数据进行聚合操作了
agg:
data.groupby("company").agg('mean')
///可用的聚合函数有:maxminsummeanmedianstd(标准差)var(方差)count
如果针对不同的列进行不同方式的聚合,比如要计算不同公司员工的平均年龄以及薪水的中位数,可以利用字典进行聚合操作的指定:
data.groupby('company').agg({'salary':'median','age':'mean'})
transform:
其与agg的区别是什么?
如果现在需要在原数据集中新增一列avg_salary,代表员工所在的公司的平均薪水(相同公司的员工具有一样的平均薪水),该怎么实现呢?
如果用agg,按照正常的步骤来计算,需要先求得不同公司的平均薪水,然后按照员工和公司的对应关系填充到对应的位置,实现代码如下:
avg_salary_dict = data.groupby('company')['salary'].mean().to_dict()
data['avg_salary'] = data['company'].map(avg_salary_dict)
使用transform的话,仅需要一行代码:
data['avg_salary'] = data.groupby('company')['salary'].transform('mean')
apply:
它相比前两种而言更加灵活,能够传入任意自定义的函数,实现复杂的数据操作。
假如要获取各个公司年龄最大员工的数据:
def get_oldest_staff(x):
...: df = x.sort_values(by = 'age',ascending=True)
...: return df.iloc[-1,:]
...:
oldest_staff = data.groupby('company',as_index=False).apply(get_oldest_staff)
填充缺失值:
很多时候我们需要将缺失值替换成有效的数值。
虽然可以通过 isnull() 方法建立掩码来填充缺失值,但是 Pandas 为此专门提供了一个fillna() 方法,它将返回填充了缺失值后的数组副本。
用一个单独的值来填充缺失值:
data.fillna(0)
用缺失值前面的有效值从前往后填充(forward-fill):
data.fillna(method='ffill')
series的话可以上述那样直接填充,如果是DataFrame还需要在填充时需要设置坐标轴参数 axis:
df.fillna(method='ffillna',axis=1)
需要注意,在从前往后填充时,如果需要填充的缺失值前面没有值,那么它就仍然是缺失值。
分组填充缺失值:举例填充平均值
data["DA_num"] = data.groupby(["industry","Year"])["DA_num"].transform(lambda x: x.fillna(x.mean()))
将处理后的文件导出为excel/csv:
data.to_excel("data_path")
data.to_csv("data_path")



