Python中读取数据最常用工具包:pandas。语法:pandas.read_excel()
pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skip_footer=0, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)
常用参数:
- io:excel的路径
- sheet_name:工作表的名称。当不输入sheet_name参数时,默认读取第一个工作表
不常用参数:
- index_col :指定某一列为索引。index_col=1
- names :列名称,传入list数据
- parse_dates :指定某列为日期格式
- header:指定行作为列名,默认为第1行。header=[1,2]多级索引
- skiprows:省略指定行的数据
- skip_footer:省略倒数n行数据
- usecols:读取指定列。usecols = [“A”,“B”]
- nrows:导入的最大行。nrows=1000
- converters: 设置数据类型。converters = {‘Var1’: str, ‘Var2’: float}
# 导入工具包
import pandas as pd # 导入pandas,并简写成pd
import numpy as np # 导入numpy,并简写成np
方法1:文件完整路径+文件名称+文件后缀
# 读取桌面data文件夹下面的excel文件
df1 = pd.read_excel('C:/Users/users/Desktop/Python课件/课件编写/data/p3_读取excel数据.xlsx')
df1
设备编号 | 型号 | 标准 | 经度 | 纬度 | 创建日期 | |
---|---|---|---|---|---|---|
0 | A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
1 | A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
2 | A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
3 | A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
4 | A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
方法2: 先指定文件路径
# 导入os工具包,设置默认路径
import os
os.chdir('C:/Users/users/Desktop/Python课件/课件编写/data/')
df2 = pd.read_excel('p3_读取excel数据.xlsx')
df2
# 注意:当需要再读取其他数据时,若路径不一致,需要写完整路径
设备编号 | 型号 | 标准 | 经度 | 纬度 | 创建日期 | |
---|---|---|---|---|---|---|
0 | A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
1 | A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
2 | A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
3 | A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
4 | A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
sheet_name参数 : 指定读取的工作表,默认第1个。
可不用写
df3 = pd.read_excel('p3_读取excel数据.xlsx',sheet_name='数据')
df3_1 = pd.read_excel('p3_读取excel数据.xlsx','数据')
# ※注意:当sheet_name拼写错误时,有时不会报错 。比如 shet_name
df3
设备编号 | 型号 | 标准 | 经度 | 纬度 | |
---|---|---|---|---|---|
0 | B21116B82 | 160T | 300000 | NaN | NaN |
1 | B21116B83 | 315T | 500000 | 120.071235 | 36.083450 |
2 | B41116B80 | 200T | 500000 | 120.071205 | 36.083442 |
3 | B41114B31 | 200T | 500000 | 114.042518 | 30.447551 |
4 | B21116B82 | 160T | 300000 | 106.655982 | 29.632772 |
index_col参数 :指定某一列为索引。
# 设置设备编号列为索引
df4 = pd.read_excel('p3_读取excel数据.xlsx',index_col='设备编号')
df4
型号 | 标准 | 经度 | 纬度 | 创建日期 | |
---|---|---|---|---|---|
设备编号 | |||||
A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
# 设置第1列为索引
df4 = pd.read_excel('p3_读取excel数据.xlsx',index_col=0)
df4
型号 | 标准 | 经度 | 纬度 | 创建日期 | |
---|---|---|---|---|---|
设备编号 | |||||
A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
names参数 :指定列名(修改列的名称)。
df5 = pd.read_excel('p3_读取excel数据.xlsx',names=['变量1','变量2','变量3','变量4','变量5','变量6'])
# ※注意:参数写成name也不报错,但变量名称并不会改
df5.dtypes
变量1 object
变量2 object
变量3 int64
变量4 float64
变量5 float64
变量6 datetime64[ns]
dtype: object
usecols参数 : 读取指定列。
df8 = pd.read_excel('p3_读取excel数据.xlsx',usecols='b:d') # 字母大写也可以
df9 = pd.read_excel('p3_读取excel数据.xlsx',usecols=['型号','经度'])
df10 = pd.read_excel('p3_读取excel数据.xlsx',usecols=['型号','标准','经度'])
# 错误写法
#df11 = pd.read_excel('读取excel数据.xlsx',usecols=['型号':'经度'])
df11 = pd.read_excel('p3_读取excel数据.xlsx')[['型号','标准','经度']] # 双括号
parse_dates参数 : 指定某列为日期格式。可用pd.to_datetime()替代
df12 = pd.read_excel('p3_读取excel数据.xlsx',parse_dates=['创建日期'])
# 注意:不能写成 parse_dates = '创建日期'
df12.dtypes
设备编号 object
型号 object
标准 int64
经度 float64
纬度 float64
创建日期 datetime64[ns]
dtype: object
# 代码1
df1 = pd.read_excel('p3_读取excel数据.xlsx',sheet_name='Sheet1')
df2 = pd.read_excel('p3_读取excel数据.xlsx',sheet_name='Sheet2')
print(df1)
print(df2)
设备编号 型号 标准 经度 纬度 创建日期
0 A21116B82 160T 300000 NaN NaN 2019-10-01
1 A21116B83 315T 500000 120.071235 36.083450 2019-10-02
2 A41116B80 200T 500000 120.071205 36.083442 2019-10-03
3 A41114B31 200T 500000 114.042518 30.447551 2019-10-04
4 A21116B82 160T 300000 106.655982 29.632772 2019-10-05
设备编号
0 C21116C82
1 C21116C82
2 C41116C80
3 C41114C31
4 C21116C82
# 代码2
with pd.ExcelFile('p3_读取excel数据.xlsx') as xls:
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], sep=’,’, delimiter=None, header=‘infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar=’"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
常用参数:
- filepath_or_buffer :文件路径
- sep :分隔符,默认逗号,还可以是空格,“|”,“\s+”
- encoding :utf-8 或者 gbk 了解更多
# 导入工具包
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/Desktop/Python课件/课件编写/data/')
df1 = pd.read_csv('p3_读取txt文件.txt',sep='\t') # \n 换行符 \t 制表符
df1.head()
名称 | 订单日期 | 订单完成日期 | 订单状态 | |
---|---|---|---|---|
0 | 翻直 | 2018/3/15 | 2018/12/14 | 调拨单 |
1 | 冲孔 | 2018/9/18 | 2018/11/26 | 调拨单 |
2 | 电控盒底 | 2018/5/11 | 2018/9/18 | 调拨单 |
3 | 电控盒底 | 2018/9/28 | NaN | 待确认调出 |
4 | 电控盒底 | 2019/9/30 | NaN | 待确认调入 |
df2 = pd.read_csv('p3_读取txt文件2.txt',sep=',',index_col=0)
df2.head()
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 0.596277 | 0.017737 | 0.343502 | 0.663646 | 0.615143 |
1 | 0.791484 | 0.160916 | 0.831575 | 0.515607 | 0.069797 |
2 | 0.326376 | 0.974685 | 0.397561 | 0.773967 | 0.287618 |
3 | 0.826980 | 0.210718 | 0.710295 | 0.277416 | 0.090221 |
4 | 0.654102 | 0.798485 | 0.775295 | 0.537434 | 0.936771 |
df3 = pd.read_csv('p3_读取csv文件.csv',encoding='gbk') # encoding 选项 gbk或者utf-8
df3.head()
名称 | 订单日期 | 订单完成日期 | 订单状态 | |
---|---|---|---|---|
0 | 翻直 | 2018/3/15 | 2018/12/14 | 调拨单 |
1 | 冲孔 | 2018/9/18 | 2018/11/26 | 调拨单 |
2 | 电控盒底 | 2018/5/11 | 2018/9/18 | 调拨单 |
3 | 电控盒底 | 2018/9/28 | NaN | 待确认调出 |
4 | 电控盒底 | 2019/9/30 | NaN | 待确认调入 |
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/Desktop/Python课件/课件编写/data/')
df = pd.read_excel('p3_数据预览.xlsx')
df.head()
df.columns # 带s 带()
df1 = pd.DataFrame(np.random.randint(10,100,(5,5)),columns=list('ABCDE'))
df1
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 37 | 72 | 80 | 59 | 16 |
1 | 61 | 63 | 54 | 35 | 28 |
2 | 37 | 63 | 35 | 73 | 36 |
3 | 16 | 57 | 31 | 30 | 13 |
4 | 27 | 19 | 63 | 27 | 53 |
df1.dtypes
A int32
B int32
C int32
D int32
E int32
dtype: object
有一个include参数:object - 汇总字符串 ;number - 汇总数字列 ;all - 所有
df1.describe()
A | B | C | D | E | |
---|---|---|---|---|---|
count | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 |
mean | 35.600000 | 54.800000 | 52.600000 | 44.800000 | 29.200000 |
std | 16.637307 | 20.717143 | 20.231164 | 20.179197 | 16.208023 |
min | 16.000000 | 19.000000 | 31.000000 | 27.000000 | 13.000000 |
25% | 27.000000 | 57.000000 | 35.000000 | 30.000000 | 16.000000 |
50% | 37.000000 | 63.000000 | 54.000000 | 35.000000 | 28.000000 |
75% | 37.000000 | 63.000000 | 63.000000 | 59.000000 | 36.000000 |
max | 61.000000 | 72.000000 | 80.000000 | 73.000000 | 53.000000 |
df1.describe().round(2).T # T数据转置
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
A | 5.0 | 35.6 | 16.64 | 16.0 | 27.0 | 37.0 | 37.0 | 61.0 |
B | 5.0 | 54.8 | 20.72 | 19.0 | 57.0 | 63.0 | 63.0 | 72.0 |
C | 5.0 | 52.6 | 20.23 | 31.0 | 35.0 | 54.0 | 63.0 | 80.0 |
D | 5.0 | 44.8 | 20.18 | 27.0 | 30.0 | 35.0 | 59.0 | 73.0 |
E | 5.0 | 29.2 | 16.21 | 13.0 | 16.0 | 28.0 | 36.0 | 53.0 |
df1.index
RangeIndex(start=0, stop=5, step=1)
df1.info()
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 5 non-null int32
1 B 5 non-null int32
2 C 5 non-null int32
3 D 5 non-null int32
4 E 5 non-null int32
dtypes: int32(5)
memory usage: 228.0 bytes
df1.info
df1.tail(2)
A | B | C | D | E | |
---|---|---|---|---|---|
3 | 16 | 57 | 31 | 30 | 13 |
4 | 27 | 19 | 63 | 27 | 53 |
df1.sample(3)
A | B | C | D | E | |
---|---|---|---|---|---|
3 | 16 | 57 | 31 | 30 | 13 |
1 | 61 | 63 | 54 | 35 | 28 |
0 | 37 | 72 | 80 | 59 | 16 |
# 文件路径
import os
os.chdir('C:/Users/users/Desktop/0基础数据/')
df1 = pd.read_csv('台账.csv',encoding='gbk')
df1.shape
(134412, 24)
df2 = pd.read_csv('C:/Users/users/Desktop/0基础数据/历史/09010228.csv',encoding='gbk')
df2.shape
(2165224, 11)
df2 = pd.read_csv('明细.txt')
df2.shape
(9656062, 14)
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/desktop/Python课件/课件编写/data/p3_批量读取数据/')
# 获取文件夹下面的所有文件名称,生成一个list
for root, dirs, files in os.walk('.',topdown=False):
print(files)
num = len(files) # 获取文件个数
data = pd.DataFrame() # 定义一个空的dataframe
# 遍历所有文件
for i in range(num):
datai = pd.read_excel('./%s' %files[i],index_col=0)
data = data.append(datai) # 添加到总的数据中
print('文件%i列, 第%i个表, 名称:%s'%(len(data.columns),i,files[i])) # 查看是否全部读取,格式是否出错
# 生导出数据
data.to_excel('C:/Users/users/desktop/p3_合并后数据.xlsx')