1. Pandas基础
import numpy as np
import pandas as pd
print("pandas的版本是:",pd.__version__)
pandas的版本是: 1.1.3
1.1 文件的读取和保存
1.1.1 文件的读取
1.1.1.1 读取csv文件
pd.read_csv() 将数据放入目录下,会减少不必要的麻烦
df_csv = pd.read_csv('data/my_csv.csv',header=None,usecols=[3,4])
df_csv
3 | 4 | |
---|---|---|
0 | col4 | col5 |
1 | apple | 2020/1/1 |
2 | banana | 2020/1/2 |
3 | orange | 2020/1/5 |
4 | lemon | 2020/1/7 |
1.1.1.2 读取txt文件
pd.read_table()
txt文件遇到分隔符非空格时,使用sep自定义分隔符号
df_txt = pd.read_table('data/my_table.txt',index_col=['col1'])
df_txt
col2 | col3 | col4 | |
---|---|---|---|
col1 | |||
2 | a | 1.4 | apple 2020/1/1 |
3 | b | 3.4 | banana 2020/1/2 |
6 | c | 2.5 | orange 2020/1/5 |
5 | d | 3.2 | lemon 2020/1/7 |
df_txt1 = pd.read_table('data/my_table_special_sep.txt')
df_txt1
col1 |||| col2 | |
---|---|
0 | TS |||| This is an apple. |
1 | GQ |||| My name is Bob. |
2 | WT |||| Well done! |
3 | PT |||| May I help you? |
df_t = pd.read_table('data/my_table_special_sep.txt',sep='\|\|\|\|',engine='python')
df_t
col1 | col2 | |
---|---|---|
0 | TS | This is an apple. |
1 | GQ | My name is Bob. |
2 | WT | Well done! |
3 | PT | May I help you? |
思考:engine=‘python’ 默认是c引擎解析,如果使用python引擎,可以解析更丰富的内容;
sep使用的是正则表达式,需要将|转义。(此知识点等学完正则表达式补充)
1.1.1.3 读取excel文件
pd.read_excel
df_excel = pd.read_excel('data/my_excel.xlsx',nrows=2, parse_dates=['col5'])
df_excel
col1 | col2 | col3 | col4 | col5 | |
---|---|---|---|---|---|
0 | 2 | a | 1.4 | apple | 2020-01-01 |
1 | 3 | b | 3.4 | banana | 2020-01-02 |
公共参数:
header=None: 第一列不作为列名
index_col: 某一列或几列作为索引
usecols: 读取列的集合,默认读取所有的列
parse_dates: 需要转化为时间的列
nrows: 读取的数据行数
若在使用了header=None,usecols时填写的是新的列名
1.1.2 数据的保存
1.1.2.1 保存csv
table_name.to_csv
df_csv1 = pd.read_csv('data/my_csv.csv')
df_csv1
col1 | col2 | col3 | col4 | col5 | |
---|---|---|---|---|---|
0 | 2 | a | 1.4 | apple | 2020/1/1 |
1 | 3 | b | 3.4 | banana | 2020/1/2 |
2 | 6 | c | 2.5 | orange | 2020/1/5 |
3 | 5 | d | 3.2 | lemon | 2020/1/7 |
df_csv1.to_csv('data/my_csv_saved_mine.csv',index=False)
注意:
(1).保存的名字重复时,原文件被覆盖
(2).保存的文件需要带文件后缀,to_csv不会默认保存为csv文件
(3).索引index一般设置为False
1.1.2.2 保存txt
table_name.to_csv
df_txt1 = pd.read_table('data/my_table.txt')
df_txt1
col1 | col2 | col3 | col4 | |
---|---|---|---|---|
0 | 2 | a | 1.4 | apple 2020/1/1 |
1 | 3 | b | 3.4 | banana 2020/1/2 |
2 | 6 | c | 2.5 | orange 2020/1/5 |
3 | 5 | d | 3.2 | lemon 2020/1/7 |
df_txt1.to_csv('data/my_txt_saved_mine.txt',sep='\t',index=False)
注意:
to_csv可以保存txt文件,并可以自定义分隔符,常见的为制表符\t分隔
1.1.2.3 保存xls文件
table_name.to_excel
df_excel1 = pd.read_excel('data/my_excel.xlsx')
df_excel1
col1 | col2 | col3 | col4 | col5 | |
---|---|---|---|---|---|
0 | 2 | a | 1.4 | apple | 2020/1/1 |
1 | 3 | b | 3.4 | banana | 2020/1/2 |
2 | 6 | c | 2.5 | orange | 2020/1/5 |
3 | 5 | d | 3.2 | lemon | 2020/1/7 |
df_excel1.to_excel('data/my_excel_saved_mine.xlsx')
1.1.2.4 表格转换为markdown语言
to_markdown
首先安装tabulate包:(在shell中)pip install tabulate
import tabulate
print(df_csv1.to_markdown())
| | col1 | col2 | col3 | col4 | col5 |
|---:|-------:|:-------|-------:|:-------|:---------|
| 0 | 2 | a | 1.4 | apple | 2020/1/1 |
| 1 | 3 | b | 3.4 | banana | 2020/1/2 |
| 2 | 6 | c | 2.5 | orange | 2020/1/5 |
| 3 | 5 | d | 3.2 | lemon | 2020/1/7 |
1.1.2.5 表格转换为latex语言
to_latex
print(df_csv1.to_latex())
\begin{tabular}{lrlrll}
\toprule
{} & col1 & col2 & col3 & col4 & col5 \\
\midrule
0 & 2 & a & 1.4 & apple & 2020/1/1 \\
1 & 3 & b & 3.4 & banana & 2020/1/2 \\
2 & 6 & c & 2.5 & orange & 2020/1/5 \\
3 & 5 & d & 3.2 & lemon & 2020/1/7 \\
\bottomrule
\end{tabular}
1.2 基本数据结构
pandas两种基本数据存储结构:一维:values的Series和二维:values的DataFrame。重点了解:属性和方法
1.2.1 Series
组成部分:
data:值
index:索引
dtype:存储类型
name:序列的名字
索引可以指定名字,默认为空
s = pd.Series(data=[100, 'a', {
'dict1':5}], #值
index=pd.Index(['id1', 20, 'third'], name='my_idx'),
# 索引的值和名称
dtype='object', #存储的类型
name='my_name' #整个序列的名称)
s
my_idx
id1 100
20 a
third {'dict1': 5}
Name: my_name, dtype: object
备注:object是混合类型,存储不同数据结构;纯字符串序列也是一种object类型序列,可以使用string类型存储。
1.2.1.1属性的获取
Series_name.values:获取值
Series_name.index:获取索引
Series_name.dtype:获取存储类型
Series_name.name:获取序列名称
Series_name.shape:获取序列的长度
Series_name[index_name]:获取单个索引对应的值
s.values
array([100, 'a', {'dict1': 5}], dtype=object)
s.index
Index(['id1', 20, 'third'], dtype='object', name='my_idx')
s.dtype
dtype('O')
s.name
'my_name'
s.shape
(3,)
备注:shape的解释:shape[0]表示最外围的数组的维数,shape[1]表示次外围的数组的维数,数字不断增大,维数由外到内。Series是一维,直接代表的是元素的个数,所以显示的(3,)
x = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[0,1,2]],[[3,4,5