Pandas-7-数据加载

将数据加载到 Pandas DataFrame 中

在机器学习中,你很有可能会使用来自很多来源的数据库训练学习算法。Pandas 使我们能够将不同格式的数据库加载到 DataFrame 中。用于存储数据库的最热门数据格式是 csv。CSV 是指逗号分隔值 ,是一种简单的数据存储格式。我们可以使用 pd.read_csv() 函数将 CSV 文件加载到 Pandas DataFrame 中。我们将 Google 股票数据加载到一个 Pandas DataFrame 中。GOOG.csv 文件包含从雅虎金融那获取的 2004 年 8 月 19 日至 2017 年 10 月 13 日 Google 股票数据。

python 复制代码
# 我们将 Google 股票数据加载到 DataFrame 中
Google_stock = pd.read_csv('./GOOG.csv')

# 我们输出关于 Google_stock 的一些信息
print('Google_stock is of type:', type(Google_stock))
print('Google_stock has shape:', Google_stock.shape)
python 复制代码
Google_stock is of type: class 'pandas.core.frame.DataFrame'
Google_stock has shape: (3313, 7)

可以看出,我们将 GOOG.csv 文件加载到了 Pandas DataFrame 中,其中包含 3,313 行和 7 列数据。现在我们来看看股票数据

python 复制代码
Google_stock
yaml 复制代码
    Date	    Open	    High	    Low	        Close	    Adj Close	Volume
0	2004-08-19	49.676899	51.693783	47.669952	49.845802	49.845802	44994500
1	2004-08-20	50.178635	54.187561	49.925285	53.805050	53.805050	23005800
2	2004-08-23	55.017166	56.373344	54.172661	54.346527	54.346527	18393200
... ...
3311	2017-10-12	987.450012	994.119995	985.000000	987.830017	987.830017	1262400
3312	2017-10-13	992.000000	997.210022	989.000000	989.679993	989.679993	1157700

可以看出,这是一个非常庞大的数据集,Pandas 自动为该 DataFrame 分配了数字行索引。Pandas 还使用出现在 CSV 文件中的标签为列分配标签。

在处理这样的大型数据集时,通常有必要直接查看前几行数据,而不是整个数据集。我们可以使用 .head() 方法查看前 5 行数据,我们还可以使用 .tail() 方法查看最后 5 行数据。

我们还可以选择使用 .head(N) 或 .tail(N) 分别显示前 N 行和后 N 行数据。

我们快速检查下数据集中是否有任何 NaN 值。为此,我们将使用 .isnull() 方法,然后是 .any() 方法,检查是否有任何列包含 NaN 值。

python 复制代码
Google_stock.isnull().any()

可以看出没有任何 NaN 值。

在处理大型数据集时,通常有必要获取关于数据集的统计信息。通过使用 Pandas 的 .describe() 方法,可以获取关于 DataFrame 每列的描述性统计信息。我们来看看代码编写方式:

python 复制代码
# We get descriptive statistics on our stock data
Google_stock.describe()

如果有必要,我们可以对单列应用 .describe() 方法,如下所示:

python 复制代码
# We get descriptive statistics on a single column of our DataFrame
Google_stock['Adj Close'].describe()

同样,你可以使用 Pandas 提供的很多统计学函数查看某个统计信息。我们来看一些示例:

python 复制代码
# We print information about our DataFrame  
print()
print('Maximum values of each column:\n', Google_stock.max())
print()
print('Minimum Close value:', Google_stock['Close'].min())
print()
print('Average value of each column:\n', Google_stock.mean())

另一个重要统计学衡量指标是数据相关性。数据相关性可以告诉我们不同列的数据是否有关联。我们可以使用 .corr() 方法获取不同列之间的关联性,如下所示:

python 复制代码
# We display the correlation between columns
Google_stock.corr()

关联性值为 1 表明关联性很高,关联性值为 0 告诉我们数据根本不相关。

在这门"Pandas 入门"课程的最后,我们将讲解 .groupby() 方法。.groupby() 方法使我们能够以不同的方式对数据分组。我们来看看如何分组数据,以获得不同类型的信息。在下面的示例中,我们将加载关于虚拟公司的虚拟数据。

python 复制代码
# We load fake Company data in a DataFrame
data = pd.read_csv('./fake_company.csv')

data

可以看出,上述数据包含从 1990 年到 1992 年的信息。对于每一年,我们都能看到员工姓名、所在的部门、年龄和年薪。现在,我们使用 .groupby() 方法获取信息。

我们来计算公司每年在员工薪资上花费的数额。为此,我们将使用 .groupby() 方法按年份对数据分组,然后使用 .sum() 方法将所有员工的薪资相加。

python 复制代码
# We display the total amount of money spent in salaries each year
data.groupby(['Year'])['Salary'].sum()

可以看出,该公司在 1990 年的薪资花费总额为 153,000 美元,在 1991 年为 162,000 美元,在 1992 年为 174,000 美元。

现在假设我们想知道每年的平均薪资是多少。为此,我们将使用 .groupby() 方法按年份对数据分组,就像之前一样,然后使用 .mean() 方法获取平均薪资。我们来看看代码编写方式

python 复制代码
# We display the average salary per year
data.groupby(['Year'])['Salary'].mean()

可以看出,1990 年的平均薪资为 51,000 美元,1991 年为 54,000 美元,1992 年为 58,000 美元。

现在我们来看看在这三年的时间内每位员工都收到多少薪资。在这种情况下,我们将使用.groupby()方法按照Name来对数据分组。之后,我们会把每年的薪资加起来。让我们来看看结果。

python 复制代码
# We display the total salary each employee received in all the years they worked for the company
data.groupby(['Name'])['Salary'].sum()

我们看到,Alice在公司工作的三年时间里共收到了162,000美元的薪资,Bob收到了150,000,Charlie收到了177,000。

现在让我们看看每年每个部门的薪资分配状况。在这种情况下,我们将使用.groupby()方法按照Year和Department对数据分组,之后我们会把每个部门的薪资加起来。让我们来看看结果。

python 复制代码
# We display the salary distribution per department per year.
data.groupby(['Year', 'Department'])['Salary'].sum()

我们看到,1990年,管理部门支付了55,000美元的薪资,HR部门支付了50,000,研发部门支付了48,000。1992年,管理部门支付了122,000美元的薪资,研发部门支付了52,000。

Supporting Materials

相关推荐
2501_938140076 小时前
做内容很省心,2026好用AI笔记,支持抖音小红书视频无水印保存
人工智能
sell-cloud9 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国11 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI11 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区11 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris13 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy13 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V13 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI13 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技14 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人