Pandas(二) 数据读写处理及统计分析

1、读取excel文件

1.1 使用Pandas读取excel文件

  1. DataFrame 默认显示数据前5行(head()函数,指定几行数据)。
  2. df.head(10) # 显示前10行数据。
  3. df.tail(10) # 查看后10行数据。

1.2 计算

计算指标:求毛利和毛利率

Jupyter上运行如下

 pycharm上运行如下

import pandas as pd
df1 = pd.read_excel("./fin_data.xlsx",sheet_name=0,converters={"公司":str})
df1["毛利"] = df1["营业收入"] - df1["营业成本"]
df1["毛利率"] = df1["毛利"] - df1["营业收入"]
print(df1.head(10)) # 显示前10行数据

输出: 
      年    月     公司       营业收入  ...       负债合计       权益合计        毛利        毛利率
0  2018  Jan  10104   34603.70  ... -584170.26  939194.95 -17875.57  -52479.27
1  2018  Jan  10105  158326.61  ...  736184.44  -20801.37  15593.64 -142732.97
2  2018  Jan  10108   98515.01  ...  344963.70  200297.66  10036.06  -88478.95
3  2018  Jan  10110   21531.00  ...  294480.98 -160385.06    768.32  -20762.68
4  2018  Jan  10111   27109.50  ...  319261.84 -160657.48   1090.89  -26018.61
5  2018  Jan  10112   29162.27  ...  404036.88 -209098.89   -490.83  -29653.10
6  2018  Jan  10114   43614.99  ...  311832.09  -85021.11   3689.66  -39925.33
7  2018  Jan  10115   18332.33  ...  245760.34  -66202.81    855.01  -17477.32
8  2018  Jan  10116   87928.16  ...  805788.05 -301544.42   -146.83  -88074.99
9  2018  Jan  10118   38146.61  ...  242816.38   25386.33   2483.14  -35663.47

2、写入excel文件

2.1 to_excel()函数

  1. to_excel()函数如果写到一个已经存在的excel,会将原有的excel表格中的数据全部覆盖。

import pandas as pd
# 读取excel
df1 = pd.read_excel("./fin_data.xlsx", sheet_name=0, converters={"公司": str})
# 计算毛利和毛利率
df1["毛利"] = df1["营业收入"] - df1["营业成本"]
df1["毛利率"] = df1["毛利"] - df1["营业收入"]
# 写入excel
df1.to_excel("./target.xlsx", sheet_name="毛利")

2.2 ExcelWriter()函数

import pandas as pd
# 读取excel
df1 = pd.read_excel("./fin_data.xlsx", sheet_name=0, converters={"公司": str})
with pd.ExcelWriter("./target.xlsx", mode="a") as writer:
    df1.to_excel(writer, sheet_name="毛利2")

2.3 Pandas读写其他文件

2.3.1 读取CSV

3、数据提取

3.1 直接索引

  1. df[ "列" ]:选取一列。
  2. df[ [ "列1" , "列2" ] ]: 选取多列,方括号里是一个列名组成的list。
  3. df[ n : m ]:按位置选取连续的行。
import pandas as pd

# 通过列表创建
data = [["100-浙江公司", 11111.00, 7777.00], ["200-北京公司", 22222.00, 8888.00], ["300-上海公司", 33333.00, 9999.00]]
df = pd.DataFrame(data=data, columns=["公司", "收入", "成本"], index=range(1, 4))
print(df["公司"])  # 选取一列
print(df[["公司", "收入"]])  # 选取多列
print(df[1:3]) # 按照位置选取连续的行

输出: 
1    100-浙江公司
2    200-北京公司
3    300-上海公司
Name: 公司, dtype: object
         公司       收入
1  100-浙江公司  11111.0
2  200-北京公司  22222.0
3  300-上海公司  33333.0
         公司       收入      成本
2  200-北京公司  22222.0  8888.0
3  300-上海公司  33333.0  9999.0

3.2 布尔索引

布尔索引,也称为带有条件判断的索引,通过条件在数组中筛选出条件为True的数据。

  1. df[ (df["列"] == 条件) ] : 选取某列满足一定条件的行。
  2. df[ (df["列1"]==条件) & df["列2"] <= 条件)]:选取多列满足一定条件的行。
  3. 注意:索引列表中可以使用&、| 等操作符,但是不能使用and, or, not等关键字。
import pandas as pd

# 通过列表创建
data = [["100-浙江公司", 11111.00, 7777.00], ["200-北京公司", 22222.00, 8888.00], ["300-上海公司", 33333.00, 9999.00]]
df = pd.DataFrame(data=data, columns=["公司", "收入", "成本"], index=range(1, 4))
print(df[(df["公司"] == "100-浙江公司")])  # 选取公司是100-浙江公司的
print(df[(df["公司"] == "200-北京公司") & (df["收入"] >= 2222.00)])

输出:
         公司       收入      成本
1  100-浙江公司  11111.0  7777.0
         公司       收入      成本
2  200-北京公司  22222.0  8888.0

3.3 索引器

  • Pandas中两种索引器应用于DataFrame,原始索引和自定义索引并存。
  • 截取部分数据。

3.3.1 loc索引器

  1. 语法 : loc[index,column]
  2. loc索引器,只能使用数组的自定义索引,未设置自定义索引情况下,才可以使用原始索引,切片区间为闭区间。根据index和column进行选取,先index后column,可以只插入index。  
  • df.loc["行"] :选取一行。
  • df.loc[["行1","行2"],["列1","列2"]] :选取行列组合。
  • df.loc[行1:行2,列1:列2] :(切片)按列名选取连续列。
  • df.loc[(df["列"]>条件)]: 选取列满足一定条件的行。
import pandas as pd

# 通过列表创建
data = [["100-浙江公司", 11111.00, 7777.00], ["200-北京公司", 22222.00, 8888.00], ["300-上海公司", 33333.00, 9999.00]]
df = pd.DataFrame(data=data, columns=["公司", "收入", "成本"], index=range(1, 4))
print(df.loc[1])  # 选取一行
print(df.loc[[1, 2], ["公司", "成本"]])  # 行列组合
print(df.loc[[3], "公司": "成本"])  # 按照列名选取连续的列

输出 :
公司    100-浙江公司
收入     11111.0
成本      7777.0
Name: 1, dtype: object
         公司      成本
1  100-浙江公司  7777.0
2  200-北京公司  8888.0
         公司       收入      成本
3  300-上海公司  33333.0  9999.0

3.3.2 iloc索引器

  1. 语法: iloc[index,column]
  2. iloc索引器与loc索引器的使用几乎相同,唯一不同的是,iloc索引器中只能使用原始索引,不能使用自定义索引(会报错)。
  3. 注意:原始索初始值从0开始,切片前闭后开。自定义索引切片为闭区间。
import pandas as pd

# 通过列表创建
data = [["100-浙江公司", 11111.00, 7777.00], ["200-北京公司", 22222.00, 8888.00], ["300-上海公司", 33333.00, 9999.00]]
df = pd.DataFrame(data=data, columns=["公司", "收入", "成本"], index=range(1, 4))
print(df.iloc[:2, 1:3])

输出:
        收入      成本
1  11111.0  7777.0
2  22222.0  8888.0

3.4 DataFrame 索引

  • DataFrame索引包含“行索引”和“列索引”。
  • DataFrame中,原始索引(也就是从0开始的数字)和自定义索引并存。
  • loc的参数只能接收自定义索引,未设置自定义索引的情况下使用原始索引。
  • iloc的参数只能接受原始索引。

4、统计分析

4.1 统计函数

以下函数除了describe函数外,都有一个axis轴参数,默认axis=0时逐计算,axis=1时逐计算

4.2 Describe函数

  1. describe()函数 将所有数值列进行总体描述统计分析。
  2. 返回的DataFrame里计算出了常见的统计指标。
  3. 也可以结合索引器单独提取想要的指标数据。

4.3 数组排序

4.3.1 sort_values()函数

  • 可以按照某行或者某列的值进行升序或者降序排序。
  • 语法:DataFrame.sort_values(by,axis=0,ascending=True)。

  • reset_index():索引重置,drop=True参数设置删除原有索引,默认重置后会增加新的列存储原有索引。

4.3.2 sort_index()函数

  1. 可以指定轴上根据索引值对数据进行排序,默认使用行索引升序排序。
  2. 语法:sort_index(axis=0,ascending=True)

4.3.3 drop()函数 和 insert()函数

4.4 累计统计

4.4.1 累计统计函数cumsum()函数

4.4.2 set_index(drop=True) 函数

将DataFrame中的列转化为行索引,想要保留原来的列索引可以使用drop=False参数,默认为True。

4.4.3 reset_index(drop=True) 函数

重置索引,获取新的index(0开始的数字)的同时,原来的index变成列保留下来。如果不想保留原来的index,使用参数drop=True(默认Flase,保留原来索引)。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值