Pandas库主要引入了两种新的数据结构:Series 和 DataFrame 。其中 Series 类似于一维数组,DataFrame类似于二维表格,可以看作是由多个 Series 按列排列构成的表格,既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作。
1. Series
pd.Series() 构造函数创建 Series 对象,传递一个数据数组(可以是列表、NumPy 数组等)和一个可选的索引数组。
pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
#data:Series 的数据部分,可以是列表、数组、字典、标量值等。
#index:Series 的索引部分,用于对数据进行标记。可以是列表、数组、索引对象等。默认整数
#dtype:指定 Series 的数据类型。可以是 NumPy 的数据类型,例如 np.int64、np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
*这里补充一点dtype的相关知识:
数据类型对象 (dtype):是 NumPy 中的一个概念,它描述了如何解释数组中每个元素对应的内存块的字节。描述数据的类型(整数、浮点数、Python 对象等)、数据的大小(例如整数占用多少字节)、数据的字节顺序(小端序或大端序)、如果数据类型是结构化数据类型(structured data type),即由其他数据类型组成的聚合类型(例如,描述由整数和浮点数组成的数组项),则结构的“字段”名称、每个字段的数据类型以及每个字段在内存块中的位置。
基础操作:
# 指定索引创建 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
# 获取值
value = series[2] # 获取索引为2的值
print(s['a']) # 返回索引标签 'a' 对应的元素
# 获取多个值
subset = series[1:4] # 获取索引为1到3的值
# 使用自定义索引
value = series_with_index['b'] # 获取索引为'b'的值
# 索引和值的对应关系
for index, value in series_with_index.items():
print(f"Index: {index}, Value: {value}")
# 使用切片语法来访问 Series 的一部分
print(s['a':'c']) # 返回索引标签 'a' 到 'c' 之间的元素
print(s[:3]) # 返回前三个元素
2. DataFrame
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
#data可为字典、二维数组、Series等。
#index,行索引,可为列表、数组、索引对象等。
#columns,列索引
- 使用列表创建
import pandas as pd
data = [['Google', 10], ['Baidu', 12], ['Wiki', 13]]
# 创建DataFrame
df = pd.DataFrame(data, columns=['Site', 'Age'])
# 使用astype方法设置每列的数据类型
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(int)
print(df)
输出结果:
Site Age
0 Google 10
1 Baidu 12
2 Wiki 13
- 使用字典创建:
import pandas as pd
data = {'Site':['Google', 'Baidu', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)
Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
import pandas as pd
data = {
"calories": [400, 360, 370],
"duration": [50, 40, 45]
}
# 载入到 DataFrame 对象
df = pd.DataFrame(data)
# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])
输出结果:
calories 420
duration 50
Name: 0, dtype: int64
calories 380
duration 40
Name: 1, dtype: int64
注:返回结果其实就是 Series 数据
3. 处理CSV文件
csv读取
import pandas as pd
df = pd.read_csv('nba.csv')#读取CSV
print(df.to_string())#使用to_string()函数返回DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面5行和末尾5行,中间部分以...代替。
df_head=df.head(n)# 读取前n行数据,默认返回5行
df_tail=df.tail(n)# 读取尾部n行,空行返回NaN
sw_info=sf.info()# 返回基本信息(行数、列数、各列数据类型)
*用Pandas读取文件十分方便,其自带的read_csv,read_json或者是read_sql函数也很好用,引申一个在目标路径已知的情况下遍历读所有.txt文件的案列:
file_dir = "D:\\metric-traffic\\traffic\\"
list_file=glob.glob(file_dir+"*.txt")
for i in range(len(list_file)):
df=pd.read_csv(list_file[i])
print(df)
csv写入
import pandas as pd
name = ["Google", "Baidu", "Taobao", "Wiki"]
site = ["www.google.com", "www.Baidu.com", "www.taobao.com", "www.wikipedia.org"]
age = [90, 40, 80, 98]
# 字典
dict = {'name': name, 'site': site, 'age': age}
df = pd.DataFrame(dict)
# 写入csv
df.to_csv('site.csv')
4. 数据清洗
常用函数:
df.dropna() # 删除包含缺失值的行或列
df.fillna(0) # 将缺失值替换为指定的值
df.replace('old_value', 'new_value')# 将指定值替换为新值
df.duplicated()# 检查是否有重复的数据
df.drop_duplicates()# 删除重复的数据