Pandas 处理 Excel 表格

作者: 鲁智深 分类: python 发布时间: 2020-09-06 17:19

一、Pandas基础介绍

处理excel表格离不开Pandas

处理Excel

处理Excel

excel通过read_excel()读取表格DataFrame再通过concat(),merge(),pivot_table()内置函数进行计算转化成需要的格式,最后to_excel()生成需要的表格。

1
2
3
4
5
6
7
8
9
10
11
12
13
pandas.append()# 上下拼接多个表格

pandas.join() # 左右拼接2各表格

pandas.concat() # 通过设置axis=0参数,左右或者上下拼接多个表格

pandas.merge() # 依照某些列相同的元素将2各表格连接在一起

pandas.pivot_table() # 相当于excel中的透视操作

pandas.rolling() # 固定窗口操作

pandas.expanding() # 拓展窗口操作

二、pandas中的数据结构 Series & DataFrame

pandas中的数据结构 Series & DataFrame

pandas中的数据结构 Series & DataFrame

1、创建Series

1
2
3
import pandas as pd
s = pd.Series([1, 2, 3.0])
print(s)

增加索引

1
2
s = pd.Series([1, 2, 3.0, 55], index=list('abcd'), dtype=int, name='num')
print(s)

字典类型

1
2
3
s = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
s = pd.Series(s)
print(s)

打印

a 1
b 2
c 3
d 4
dtype: int64

利用index设置长度

1
2
s = pd.Series(3.0, index=['a', 'b', 'c'])
print(s)

a 3.0
b 3.0
c 3.0
dtype: float64

2、创建DataFrame

1
2
3
list_2d = [[1, 2], [3, 4]]
df = pd.DataFrame(list_2d)
print(df)

创建一个列索引columns,行索引index

1
2
3
list_2d = [[1, 2, 6], [3, 4, 87], [3, 4, 9]]
df = pd.DataFrame(list_2d, columns=['a', 'b', 'c'], index=[1, 2, 3])
print(df)

字典方式

1
2
3
d = {'a': [1, 2, 6], 'b': [3, 4, 87], 'c': [3, 4, 9]}
df = pd.DataFrame(d, index=[1, 2, 3])
print(df)

读取xls

1
2
df = pd.read_excel('3.xls')
print(df)

三、sheet_name参数read_excel()函数读excel

sheet_name

sheet_name

1.读取第2张表的数据,第一张是0

1
2
df = pd.read_excel('3.xls', sheet_name=1)
print(df)

2.也可以用表名称

1
2
df = pd.read_excel('3.xls', sheet_name='666')
print(df)

3.也可以取多个数据,用下标取数据

1
2
df = pd.read_excel('3.xls', sheet_name=[0, '666'])
print(df['666'])

4.读取所有的表

1
2
df = pd.read_excel('3.xls', sheet_name=None)
print(df)

四、header参数read_excel()函数读excel

1.读取数据不指定header就默认第一行作为header

1
2
df = pd.read_excel('3.xls', header=None)
print(df)

2.如果没有表头传入一个None,默认1,2,3,4

1
2
df = pd.read_excel('3.xls', header=None)
print(df)

3.读取表666索引为0的表头

1
2
df = pd.read_excel('3.xls', sheet_name='666', header=0)
print(df)

4.把第一列作为行索引

1
2
df = pd.read_excel('3.xls', sheet_name='666', index_col=0)
print(df)

五、usecols 参数 read_excel( ) 函数读excel

表格

表格

1.按下标读取第一列和第二列的数据

1
2
3
import pandas as  pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', header=1,  usecols=[0, 1])
print(df)

2.按列默认索引名称读取第一列和第二列的数据

1
2
3
import pandas as  pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', header=1,  usecols='A,B')
print(df)

3.按列名称读取数据(推荐用法)

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', header=1,  usecols=['相关'])
print(df)

4.用函数读取数据

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', header=1,  usecols=lambda x: (x == '相关'))
print(df)

六、skiprows 参数read_excel( )函数读excel

1.跳过一行

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', skiprows=1)
print(df)

2.跳过0下标

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', skiprows=[0])
print(df)

七、name参数read_excel( )函数读excel

自定义表头,默认吧第一行的表头替换

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', names=['关键词', '1', '2', '3', '4', '5'])
print(df)

设置header=None

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', names=['关键词', '1', '2', '3', '4', '5'], header=None)
print(df)

八、dtype参数read_excel( )函数读excel

dtype参数read_excel( )函数读excel

dtype参数read_excel( )函数读excel

设置不同的类型,不同的类型可以使用不同的函数

1
2
3
4
5
6
7
import pandas as pd
d_type = {
    "关键词": "str",
    "类型": "category"
}
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', dtype=d_type)
print(df.dtypes)

整型 int8/int16/int32/int64(默认)
浮点型 float16/float32/float64(默认)
字符串 str/string
布尔 bool
分类 category
时间戳 datetime64[ns]
时间周期 period[Y/M/D]
python对象混合类型 object

九、parse_dates参数read_excel( )函数读excel

parse_dates:解析成日期格式

True: 尝试解析index
[0,1] 或 [“a”, “b”] 尝试解析指定列作为一个单独的日期列
[[0,1,2]] 结合多列解析为单个日期列
{‘日期’: [0,1,2]} 同上,结果的列名改为’日期’

十、date_parser参数read_excel( )函数读excel

解析成日期格式的函数

1
2
3
4
5
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', parse_dates=[0], date_parser=lambda x: pd.to_datetime(
    x, format='%Y年%m月%d日'
))
print(df.dtypes)

十一、na_values 参数read_excel( )函数读excel

缺失值NaN,将空格或者字符串改成NaN

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', na_values=[' ', '施华蔻 染发'])
print(df)

只替换一列

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', na_values={'关键词': [' ', '施华蔻 染发']})
print(df)

十二、converters参数read_excel( )函数读excel

修改某列的值,增加或者去除空格等等

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', converters={'数量': lambda x: x+1})
print(df)

十三、true_values false_values参数read_excel( )函数读excel

把某一列转化为true或者false,必须保证某一列能全部转化

1
2
3
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', true_values=["施华蔻"], false_values=["爱茉莉"])
print(df)

只对字符串有效

十四、to_excel方法写excel

1
2
3
4
5
6
7
8
DateFrame.to_excel(
    self,              
    excel_writer,      # 文件路径
    sheet_name='Sheet1', # sheet名字
    index=True,          # 是否输出index
    float_format=None,   # 浮点数输出格式,如 "%.2f"
    na_rep=""            # 缺失值输出的表示形式
)

设置index, 定义表名称,自定义空值,保留小数点2位

1
2
3
4
5
import pandas as pd
df = pd.DataFrame({"名称": ["超人", "小学生"], "年龄": ["1", "2"], "价格": [100.03123, None]}, index=['a', 'b'])
df.index.name = "序列"
print(df)
df.to_excel('./www.xlsx', sheet_name='fff', float_format="%.2f", na_rep="空值")

十五、ExcelWriter类写excel
1.设置datatime输出格式
2.输出多个sheeet

1
2
3
4
5
6
7
8
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'日期': [datetime(2020, 1, 5), datetime(2020, 6, 5)], "销量": [1, 4]})
df1 = pd.DataFrame({'日期': [datetime(2020, 1, 5), datetime(2020, 6, 5)], "销量": [1, 4]})

with pd.ExcelWriter('de.xlsx', datetime_format='YYYY-MM-DD') as writer:
    df1.to_excel(writer, sheet_name="1", index=False)
    df.to_excel(writer, sheet_name="2", index=False)

十六、读写csv文件

写csv文件

1
2
3
import pandas as pd
df = pd.DataFrame({"名称": ["超人", "小学生"], "年龄": ["1", "2"], "价格": [100.03123, None]}, index=['a', 'b'])
df.to_csv('./www.csv', index=False)

写csv文件,设置分隔符

1
2
3
import pandas as pd
df = pd.DataFrame({"名称": ["超人", "小学生"], "年龄": ["1", "2"], "价格": [100.03123, None]}, index=['a', 'b'])
df.to_csv('./www.csv', index=False, sep="|")

读csv文件

1
2
3
import pandas as pd
df = pd.read_csv('./www.csv')
print(df)

十七、index索引

主要三个作用:识别,对齐,获取和设置

索引

索引

十八、像字典一样选择数据selecting dict-like

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd

df = pd.read_excel('./拆开-染发相关数据抓取.xlsx')
print(df)
print('----------------------')
print(df.get("关键词"))
print('----------------------')
print(df.get("数量"))
print('----------------------')
print(df.get(["关键词", "数量"]))
print('----------------------')

# 这里取的是行 True显示行,False不显示
print(df[[True, False, True, True, False, True, True, False, True, True]])

# 利用计算显示需要的行
print(df["数量"] > 5)
print('----------------------')
# & 且
print(df[(df["数量"] > 5) & (df["数量"] < 9)])
print('----------------------')
# | 或者
print(df[(df["数量"] == 5) | (df["数量"] == 9)])
# 取反
print(df[~(df["数量"] == 5)])

十九、切片_selecting list-like

1
2
3
4
5
6
7
import pandas as pd

df = pd.read_excel('./拆开-染发相关数据抓取.xlsx')
print(df)
print('----------------------')
# 0-5切片
print(df[0:5])

二十、selecting loc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import pandas as pd

df = pd.read_excel('./拆开-染发相关数据抓取.xlsx')
print(df)
print('----------------------')
# 打印出某行
print(df.loc[1])
print('----------------------')
# 打印出某行中的某列
print(df.loc[1, "关键词"])
print('----------------------')
# 打印出多行
print(df.loc[[0, 1]])
print('----------------------')
# 打印出多行多列
print(df.loc[[0, 1], ["关键词"]])
print('----------------------')
# 打印出切片
print(df.loc[0:5])
print('----------------------')
# 打印隔行选择
print(df.loc[::2, ::2])
print('----------------------')
# 也可以用true,false
print(df.loc[[True, False, True, False, True, True, True, False, True, True], [True, False, True, False, True, True]])
print('----------------------')
# 函数
print(df.loc[lambda df: [True, False, True, False, True, True, True, False, True, True],
             lambda df: [True, False, True, False, True, True]])
print('----------------------')
# 分组在求和
print(df.groupby(['价格', '类型']).sum())
print('----------------------')
# 选出大于200的内容
print(df.groupby(['价格', '类型']).sum().loc[lambda df: df["质量"] > 200])

二十一、selecting iloc

使用逻辑和loc一样,唯一不同的是loc用标签刷选,iloc必须是整数

二十二、赋值

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd

df = pd.read_excel('./拆开-染发相关数据抓取.xlsx')
print(df)
print('----------------------')
# 赋值
df["数量"] = 10
df["数量"] = df["数量"] * 10
df["111"] = df["数量"] * df["类型"]
df.loc[df["数量"] == 100, '数量'] = 2000
df.loc[1:2, "数量"] = 333
print(df)

二十三、加减乘除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
df = pd.read_excel('./拆开-染发相关数据抓取.xlsx')
print(df)
print('----------------------')
print(df["数量"] + df["价格"])
print('----------------------')
# 空值处理
print(df["数量"].fillna(0) + df["价格"].fillna(0))
print('----------------------')
# 内置函数 +
print(df["数量"].add(df["价格"], fill_value=0))
print('----------------------')
# 内置函数 -
print(df["数量"].sub(df["价格"], fill_value=0))
print('----------------------')
# 内置函数 *
print(df["数量"].mul(df["价格"], fill_value=0))
print('----------------------')
# 内置函数 /
print(df["数量"].div(df["价格"], fill_value=0))
print('----------------------')

二十四、MultiIndex 多层索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd

df = pd.read_excel('./拆开-染发相关数据抓取.xlsx', header=[0, 1])
print(df)
print('----------------------')
# 打印表头
print(df.columns)
print('----------------------')
# 相加
print(df["京东", "数量"] + df["淘宝", "数量"])
print('----------------------')
print(df["京东"] + df["淘宝"])
print('----------------------')
# 创建一个多层索引
df_text = df["京东"] + df["淘宝"]
print(df_text.columns)
df_text.columns = pd.MultiIndex.from_product([["总"], df_text.columns])
print(df_text)
print('----------------------')
# 拼接表结果
print(df.join(df_text))

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注