前面内容:pandas(11 分类数据和数据可视化)
目录
一、Python Pandas IO工具
1.1 read_csv() 和 read_table()
1.2 CSV 文件
二、Python Pandas 稀疏数据
2.1 SparseDtype()
2.2 density和dense
2.3 稀疏数据类型
一、Python Pandas IO工具
Pandas I/O API 是一组顶级读取函数,可以像 pd.read_csv() 一样访问,通常返回一个Pandas对象。
读取文本文件(或平面文件)的两个核心函数是 read_csv() 和 read_table() 。它们都使用相同的解析代码,智能地将表格数据转换为 DataFrame 对象 –
1.1 read_csv() 和 read_table()
read_csv() :
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None
read_table() :
pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer',
names=None, index_col=None, usecols=None
1. filepath_or_buffer
-
作用:指定要读取的文件路径或文件对象。
-
类型:字符串或
path-like
对象。 -
示例:
"data.csv"
或r"c:\path\to\file.csv"
。
2. sep
或 delimiter
-
作用:指定分隔符。它用于分隔每一列的数据。
sep
和delimiter
是可以互换的参数,sep
是read_csv()
的标准参数,delimiter
只是别名。 -
默认值:
,
(逗号)。 -
示例:
-
sep=','
适用于标准的 CSV 文件。 -
sep='\t'
适用于以制表符(Tab)分隔的文件(TSV 文件)。 -
sep=';'
适用于以分号分隔的文件。
-
3. header
-
作用:指定哪一行是列名。如果设置为
None
,则默认从文件的第一行读取列名。 -
默认值:
'infer'
,表示自动推断列名(即文件的第一行作为列名)。 -
示例:
-
header=0
:使用文件的第一行作为列名。 -
header=None
:不使用文件的任何行作为列名,并且会自动生成默认列名。 -
header=1
:将文件的第二行作为列名。
-
4. names
-
作用:指定列名。如果
header=None
,则必须提供此参数来指定列名。 -
类型:列表或数组,包含列名的字符串。
-
示例:
names=['Column1', 'Column2', 'Column3']
5. index_col
-
作用:指定哪一列作为行索引。可以是列的名称或列的索引(0-based)。
-
默认值:
None
,表示没有指定索引列。 -
示例:
-
index_col=0
:使用文件中的第一列作为索引。 -
index_col='ID'
:使用名为'ID'
的列作为索引。
-
6. usecols
-
作用:指定要读取的列的名称或索引,可以是一个列表。如果你只想读取数据文件中的一部分列,可以使用此参数来选择特定的列。
-
类型:列表、字符串或
None
。 -
示例:
-
usecols=['A', 'B', 'C']
:只读取列A
、B
和C
。 -
usecols=[0, 2, 3]
:只读取索引为 0、2 和 3 的列。
-
1.2 CSV 文件
例1:创建 CSV 文件
import pandas as pd# 创建一个 DataFrame
temp = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston'],'Salary' :[2000,3000,5000,8000]
}df = pd.DataFrame(temp)# 将 DataFrame 保存为 CSV 文件
df.to_csv('temp.csv', index=False) # `index=False` 避免将行索引写入文件
例2:读取csv
df=pd.read_csv("temp.csv")
print(df)
运行结果:
例3:自定义索引
df_with_index = pd.read_csv("temp.csv", index_col='Name')
print(df_with_index)
运行结果:
例4:转换数据类型
df = pd.read_csv("temp.csv", dtype={'Salary': np.float64})
print(df.dtypes)# 输出数据类型
print('-'*50)
print(df)
运行结果:
例5:header_names
使用names参数指定头部的名称。
df=pd.read_csv("temp.csv", names=['a', 'b', 'c','d'])
print(df)
print('-'*50)
df=pd.read_csv("temp.csv",names=['a','b','c','d'],header=0)
print(df)
运行结果:
例6:跳过行数
skiprows跳过指定的行数。
df=pd.read_csv("temp.csv", skiprows=2)
print(df)
运行结果:
二、Python Pandas 稀疏数据
Pandas提供了对稀疏数据的原生支持,尤其是通过稀疏Series和稀疏DataFrame。在Pandas中,稀疏数据主要通过SparseDtype() 来实现。稀疏对象的存在是为了提高内存效率
2.1 SparseDtype()
SparseDtype()参数:
1. dtype
- 作用:指定数据的类型。例如,
"float64"
,"int32"
,"bool"
等等。 - 默认值:没有默认值,必须提供一个数据类型。
- 示例:
pd.SparseDtype("float64")
表示该稀疏数据为float64
类型。
2. fill_value
- 作用:指定用于表示缺失值的填充值。通常用
np.nan
或其他占位符(如0
)表示稀疏值。 - 默认值:
np.nan
。 - 示例:
pd.SparseDtype("float64", np.nan)
表示稀疏数据为float64
类型,缺失值使用np.nan
填充。
例1:SparseDtype()
import pandas as pd
import numpy as np# 创建一个包含随机数的Series
ts = pd.Series(np.random.randn(10))# 将一些值设置为NaN
ts[2:-2] = np.nan# 将Series转换为稀疏格式
sts = ts.astype(pd.SparseDtype("float64", np.nan))
# 打印稀疏Series
print(sts)
运行结果:
2.2 density和dense
例2:sparse.density
import pandas as pd
import numpy as np# 创建一个包含随机数的DataFrame
df = pd.DataFrame(np.random.randn(10000, 4))# 将前9999行的所有值设置为NaN,构成稀疏数据
df.iloc[:9999] = np.nan# 转换为稀疏DataFrame
sdf = df.astype(pd.SparseDtype("float64", np.nan))# 打印稀疏DataFrame的密度
print(sdf.sparse.density)
注意:density是 SparseSeries
中的一个属性,而不是 DataFrame
中的,所以.sparse.density不能缺
例3 :转换回密集型
import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.astype(pd.SparseDtype())
print(sts.sparse.to_dense())
运行结果:
2.3 稀疏数据类型
稀疏数据应与其稠密表示具有相同的数据类型。目前支持 float64, int64 和 booldtypes 。根据原始数据类型, fill_value 的默认值会发生变化 −
- float64 − np.nan
-
int64 − 0
-
bool − False
例4:
import pandas as pd
import numpy as nps = pd.Series([1, np.nan, np.nan])
print(s)
print('-'*50)
s_sparse = s.astype(pd.SparseDtype())
print(s_sparse)
运行结果: