Python数据分析基础_第3节:数据读取与预览

第3节 数据读取与预览

读取excel文件丨pandas.read_excel() 丨 ★★★★★

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参数 :指定某一列为索引。

  • 可用df.set_index()替代
  • 可用变量名或者变量序号
# 设置设备编号列为索引
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参数 :指定列名(修改列的名称)。

  • 可用df.rename()替代
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参数 : 读取指定列。

  • 可用df[[‘变量1’,‘变量2’]]替代
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')

读取csv或者txt文件丨pandas.read_csv() 丨 ★★★★★

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 了解更多

读取txt文件

# 导入工具包
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

读取cvs格式文件

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 待确认调入

读取数据库文件

  • Python
  • Navicat软件 丨★
  • heidisql软件 丨★★★

数据预览

import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/Desktop/Python课件/课件编写/data/')
df = pd.read_excel('p3_数据预览.xlsx')  

前n行 丨★★

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

倒数n行

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

案例

读取10万条数据

# 文件路径
import os
os.chdir('C:/Users/users/Desktop/0基础数据/')
df1 = pd.read_csv('台账.csv',encoding='gbk')
df1.shape
(134412, 24)

读取100万条数据

df2 = pd.read_csv('C:/Users/users/Desktop/0基础数据/历史/09010228.csv',encoding='gbk')
df2.shape
(2165224, 11)

读取1000万条数据

df2 = pd.read_csv('明细.txt')
df2.shape
(9656062, 14)

批量读取excel数据并合并

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')

本节重点

  • 读取excel、csv文件常用参数:文件路径、sheet_name、sep、encoding
  • DataFrame数据预览:columns、describe()、head()、dtypes

你可能感兴趣的:(Python,数据分析)