Python数据文件的读取——Pandas库的使用

发布时间 2023-11-28 21:27:34作者: 郝hai

Pandas 是一个强大的数据分析库,它提供了一个名为 DataFrame 的数据结构,类似于 R 中的 data.frame。DataFrame 是一个二维的、标签化的数据结构,可以包含不同数据类型的列。它提供了许多方便的功能,如数据选择、过滤、合并、排序等,使得数据分析和处理变得更加容易。Pandas 的 DataFrame 是为了更方便地处理表格形式的数据而设计的,提供了丰富的功能和方法。虽然它在数据分析和处理中非常流行,但并不是 Python 中唯一的数据格式。

一、Pandas获取数据信息函数

Pandas 库是机器学习四个基础库之一, 它有着强大的数据分析能力和处理工具。它支持数据增、删、改、查;支持时间序列分析功能;支持灵活处理缺失数据;具有丰富的数据处理函数;具有快速、灵活、富有表现力的数据结构:DataFrame 数据框和 Series 系列。

DataFrame 数据框 Series 系列

[pandas官方学习文档](http://pandas.pydata.org/docs/reference/index.html)
数据存储路径或工作路径

import os
import pandas as pd
print(os.getcwd())  # 获取当前工作目录

数据信息

nba = pd.read_csv("nbaallelo.csv")
#https://github.com/fivethirtyeight/data/blob/master/nba-elo/nbaallelo.csv
type(nba))                    #数据类型
len(nba)                      #数据长度
nba.shape                     #数据维度
nba.head()                    #前5行数据
nba.info()                    #数据结构
nba.sample(10)                #抽取10个样本
nba.describe()                #数值型数据的四分位数
print(nba.describe())

二、读写*.csv数据

  • 文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。
  • csv 是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数字和文本)。

2.1 文件读取

CSV 又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格数据。 CSV 文件能够以纯文本形式存储表格数据,比如电子表格、数据库文件,并具有数据交换的通用格式。CSV 文件会在 Excel 文件中被打开,其行和列都定义了标准的数据格式。将 CSV 中的数据转换为 DataFrame 对象是非常便捷的。和一般文件读写不一样,它不需要你做打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤,并将数据存储在 DataFrame 中。

read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, dtype=None, engine=None, nrows=None)`
参数名称 说明
filepath 接收 string。代表文件路径。无默认。
sep 接收 string。代表分隔符。read_csv 默认为' , ',read_table 默认为制表符 '[Tab]'。
header 接收 int 或 sequence。表示将某行数据作为列名。默认为 infer,表示自动识别。
names 接收 array。表示列名。默认为 None。
index_col 接收 int、sequence 或 False。表示索引列的位置,取值为 sequence 则代表多重索引。默认为 None。
dtype 接收 dict。代表写入的数据类型(key:列名,values:数据格式)。默认为 None。
engine 接收 C 或者 Python。代表数据解析引擎。默认为 C。
  • sep 参数是指定文本的分隔符,如果分隔符指定错误,在读取数据的时候,每一行数据将连城一片。
  • header 参数是用来指定列名,如果是 None 则会添加一个默认的列名。
  • encoding 代表文件的编码格式,常用的编码有 utf-8、utf-16、gbk、gb18030、big5 等。如果编码指定错误,数据将无法读取,Ipython 解释器会报解析错误。
import pandas as pd
pd.read_csv(r"nbaallelo.csv")
  gameorder       game_id lg_id  ...  game_result  forecast notes
0          1  194611010TRH   NBA  ...            L  0.640065   NaN
1          1  194611010TRH   NBA  ...            W  0.359935   NaN
2          2  194611020CHS   NBA  ...            W  0.631101   NaN
3          2  194611020CHS   NBA  ...            L  0.368899   NaN
4          3  194611020DTF   NBA  ...            L  0.640065   NaN

2.2 数据存储

结构化数据通过 Pandas 中的 to_csv 函数实现以 csv 文件格式存储文件。

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', columns=None, header=True, index=True, index_label=None, mode='w', encoding=None)
参数名称	说明
path_or_buf	接收 string。代表文件路径。无默认。
sep	接收 string。代表分隔符。默认为 ','。
na_sep	接收 string。代表缺失值。默认为 ' '。
columns	接收 list。代表写出的列名。默认为 None。
header	接收 boolean。代表是否将列名写出。默认为 True。
index	接收 boolean。代表是否将行名(索引)写出。默认为 True。
index_label	接收 boolean。代表索引名。默认为 None。
mode	接收特定 string。代表数据写入模式。默认为 w。
encoding	接收特定 string。代表存储文件的编码格式。默认为 None。
from sklearn.datasets import load_iris
import pandas as pd
# 加载iris数据集
iris = load_iris()
# 创建DataFrame
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
output_csv_file = 'iris_dataset.csv'
df.to_csv(output_csv_file, index=False)

三、读取Clipboard数据

读数据 写数据
#预先剪贴板上已经复制数据
import pandas as pd
df = pd.read_clipboard()     #读取剪切板中的数据
print(df)

四、读取*.xlsx数据

使用pandas的read_excel()方法,可通过文件路径直接读取。注意到在一个excel文件中有多个sheet,因此,对excel文件的读取实际上是读取指定文件、并同时指定sheet下的数据。可以一次读取一个sheet,也可以一次读取多个sheet,同时读取多个sheet时后续操作可能不够方便,因此建议一次性只读取一个sheet。当只读取一个sheet时,返回的是DataFrame类型,这是一种表格数据类型,它清晰地展示出了数据的表格型结构。

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:文件路径 io = r’D:\test.xlsx’
sheet_name:表名,可指定读取单表、多表、全部表
sheet_name = None # 读取全部表,得到 OrderDict:key为表名,value为 DataFrame
sheet_name = 1 / “Sheet1” # 读取单表,返回 DataFrame
sheet_name = [0, 1] / [“Sheet1”, “Sheet2”] # 读取多表,返回一个OrderDict
header:指定抬头(含列名的标题行)
names:设置列名,必须是list类型,且长度和列数一致
names = [“Student_No.”, “Name”, “Score”]
usecols:使用的行
usecols = range(1, 3) # 使用 [1, 3) 行,不包括第 3 行
usecols = [4, 7] # 使用 4和7 行
skiprows:指定跳过的行数(不读取的行数)

(1)不指定sheet参数,默认读取第一个sheet
 df=pd.read_excel(“data_test.xlsx”,header=None)
(2)指定sheet名称读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=“test1”,header=None)
(3)指定sheet索引号读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=0,header=None) #sheet索引号从0开始
#默认有表头的读取方式,不带表头的读取添加参数header=None
有表头(推荐) 无表头
import pandas as pd
from openpyxl.workbook import Workbook    #提示要安装这个库,原因不明
from sklearn.datasets import load_iris

# 加载iris数据集
iris = load_iris()
# 创建DataFrame
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# 将DataFrame写出为Excel文件
output_excel_file = 'iris_dataset.xlsx'
df.to_excel(output_excel_file, index=False)
print(f"DataFrame已成功写出到 {output_excel_file}")
 读取Excel文件
read_df = pd.read_excel(output_excel_file)
# 显示读取的数据的前5行
print("\n读取的Excel文件的前5行:")
print(read_df.head())
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2

参考文献

  1. 行远见大』Python 进阶篇:Pandas 库
  2. PYTHON 在剪贴板上读取/写入数据
  3. 用python的pandas读取excel文件中的数据