- UID
- 2
- 积分
- 2892487
- 威望
- 1396275 布
- 龙e币
- 1496212 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
【Pandas 教程系列】- Pandas 数据结构 - DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
DataFrame 特点:
列和行: DataFrame 由多个列组成,每一列都有一个名称,可以看作是一个 Series。同时,DataFrame 有一个行索引,用于标识每一行。
二维结构: DataFrame 是一个二维表格,具有行和列。可以将其视为多个 Series 对象组成的字典。
列的数据类型: 不同的列可以包含不同的数据类型,例如整数、浮点数、字符串等。
DataFrame 构造方法如下:- pandas.DataFrame( data, index, columns, dtype, copy)
复制代码 参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
Pandas DataFrame 是一个二维的数组结构,类似二维数组。
实例 - 使用列表创建- import pandas as pd
- data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
- # 创建DataFrame
- df = pd.DataFrame(data, columns=['Site', 'Age'])
- # 使用astype方法设置每列的数据类型
- df['Site'] = df['Site'].astype(str)
- df['Age'] = df['Age'].astype(float)
- print(df)
复制代码 也可以使用字典来创建:
实例 - 使用字典创建- import pandas as pd
- data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
- df = pd.DataFrame(data)
- print (df)
复制代码 输出结果如下:
以下实例使用 ndarrays 创建,ndarray 的长度必须相同, 如果传递了 index,则索引的长度应等于数组的长度。如果没有传递索引,则默认情况下,索引将是range(n),其中n是数组长度。
ndarrays 可以参考:NumPy Ndarray 对象
实例 - 使用 ndarrays 创建- import numpy as np
- import pandas as pd
- # 创建一个包含网站和年龄的二维ndarray
- ndarray_data = np.array([
- ['Google', 10],
- ['Runoob', 12],
- ['Wiki', 13]
- ])
- # 使用DataFrame构造函数创建数据帧
- df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])
- # 打印数据帧
- print(df)
复制代码 输出结果如下:
从以上输出结果可以知道, DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列):
还可以使用字典(key/value),其中字典的 key 为列名:
实例 - 使用字典创建- import pandas as pd
- data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
- df = pd.DataFrame(data)
- print (df)
复制代码 输出结果为:
没有对应的部分数据为 NaN。
Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
实例- import pandas as pd
- data = {
- "calories": [420, 380, 390],
- "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
复制代码 注意:返回结果其实就是一个 Pandas Series 数据。
也可以返回多行数据,使用 [[ ... ]] 格式,... 为各行的索引,以逗号隔开:
实例- import pandas as pd
- data = {
- "calories": [420, 380, 390],
- "duration": [50, 40, 45]
- }
- # 数据载入到 DataFrame 对象
- df = pd.DataFrame(data)
- # 返回第一行和第二行
- print(df.loc[[0, 1]])
复制代码 输出结果为:- calories duration
- 0 420 50
- 1 380 40
复制代码 注意:返回结果其实就是一个 Pandas DataFrame 数据。
我们可以指定索引值,如下实例:
实例- import pandas as pd
- data = {
- "calories": [420, 380, 390],
- "duration": [50, 40, 45]
- }
- df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
- print(df)
复制代码 输出结果为:- calories duration
- day1 420 50
- day2 380 40
- day3 390 45
复制代码 Pandas 可以使用 loc 属性返回指定索引对应到某一行:
实例- import pandas as pd
- data = {
- "calories": [420, 380, 390],
- "duration": [50, 40, 45]
- }
- df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
- # 指定索引
- print(df.loc["day2"])
复制代码 输出结果为:- calories 380
- duration 40
- Name: day2, dtype: int64
复制代码 更多 DataFrame 说明
基本操作:- # 获取列
- name_column = df['Name']
- # 获取行
- first_row = df.loc[0]
- # 选择多列
- subset = df[['Name', 'Age']]
- # 过滤行
- filtered_rows = df[df['Age'] > 30]
复制代码 属性和方法:- # 获取列名
- columns = df.columns
- # 获取形状(行数和列数)
- shape = df.shape
- # 获取索引
- index = df.index
- # 获取描述统计信息
- stats = df.describe()
复制代码 数据操作:- # 添加新列
- df['Salary'] = [50000, 60000, 70000]
- # 删除列
- df.drop('City', axis=1, inplace=True)
- # 排序
- df.sort_values(by='Age', ascending=False, inplace=True)
- # 重命名列
- df.rename(columns={'Name': 'Full Name'}, inplace=True)
复制代码 从外部数据源创建 DataFrame:- # 从CSV文件创建 DataFrame
- df_csv = pd.read_csv('example.csv')
- # 从Excel文件创建 DataFrame
- df_excel = pd.read_excel('example.xlsx')
- # 从字典列表创建 DataFrame
- data_list = [{'Name': 'Alice', 'Age': 25}, {'Name': 'Bob', 'Age': 30}]
- df_from_list = pd.DataFrame(data_list)
复制代码 注意事项:
DataFrame 是一种灵活的数据结构,可以容纳不同数据类型的列。
列名和行索引可以是字符串、整数等。
DataFrame 可以通过多种方式进行数据选择、过滤、修改和分析。
通过对 DataFrame 的操作,可以进行数据清洗、转换、分析和可视化等工作。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|