13种将数据导入pandas Dataframe的方法 您所在的位置:网站首页 excel支持哪些数据的导入方法 13种将数据导入pandas Dataframe的方法

13种将数据导入pandas Dataframe的方法

2024-07-10 04:00| 来源: 网络整理| 查看: 265

大多数Python分析都是从将数据导入你的环境开始的。但是如果这些数据停留在数据库中呢?或者在一个API后面?或者在一堆小文件中? 幸运的是,Python 是非常灵活的,它有很多用于访问和处理数据的开源库。在本教程中,我们将研究13种将数据导入pandas Dataframe的方法,之后可以对其进行清理、分析和可视化。我们可以将这些方法分为4个主要类别。 本地文件 数据库 APIs 数据集访问库 唯一的主要要求是安装pandas库。 $ pip install pandas 有了这些,我们就可以开始行动了! 📁 本地文件 通常情况下,你所需要的数据是存储在你的计算机上的一个本地文件中。根据你运行 Python 环境的位置,你可以将文件名指定为相对路径或绝对路径。 绝对路径:

file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"

相对路径,假设当前工作目录是my_project

file2 = "./data/example.csv" CSV文件 CSV是存储表格数据的一个流行选择,也是最简单的入门方法。让我们假设你已经从《我们的数据世界》中下载了这个人口数据集。 import pandas as pd csv_file = "/Users/johnreid/Downloads/population by-country.csv" df_from_csv = pd.read_csv(csv_file) df_from_csv.info()

导入数据后,运行df.info()对了解你的数据结构很有帮助,例如,你有多少行、多少列和多少非空值。运行该代码可以得到以下输出。

这个方法也适用于通过URL访问的文件,比如公共的Google Sheet或公共的Github repo中的CSV文件。另外,如果你一直得到一个FileNotFoundError,那么试着重命名你的文件名,用下划线代替空格,例如,"Financial Sample.xlsx "变成 "Financial_Sample.xlsx"。

Excel文件 对于Excel文件,你需要更谨慎一些,因为它们可能包含不止一张数据和复杂的视觉格式,例如额外的标题行。否则,语法是非常相似的--这里有一个金融数据的例子。 import pandas as pd excel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx" df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1") df_from_excel.info() 文本文件 文本文件通常需要更多的数据处理--首先看一下数据是如何存储的,以及你想在Python中如何表示它。从那里,你可以写代码将文本输入转化为数据框架。让我们用一个购物清单的例子,每一行都包含一个项目和一个数量。

要把它转换成一个数据框架,你可以运行以下程序。

shopping_list = "/Users/johnreid/Downloads/shopping_list.txt" result = [] with open(shopping_list) as f: line = f.readline() while line: result.append(line.strip().split(" " )) line = f.readline() f.close() df_from_textfile = pd.DataFrame(results, columns = ["Item", "Quantity"])

我们逐一读行,去除多余的空白,并将行分成两部分。当我们创建一个数据框架时,我们还需要指定列名。

多个文件/文件夹 如果你需要从多个存储文件中提取数据会怎样?让我们结合我们学到的一些东西,从BBC体育的文本数据集中提取数据。

我们有5个子文件夹,每个文件夹有大约100个文件。每个文件都以一个标题开始,然后是文章的正文。我们的目标是将所有这些文件合并成一个带有 "标题"、"副标题"、"正文 "和 "流派 "列的数据框。glob库在这里真的很有用,它可以列出所有可能的文件名。

import glob import pandas as pd base_path = "/Users/johnreid/Downloads/bbcsport/" genres = ["athletics", "cricket", "football", "rugby", "tennis"] def read_and_split_file(filename): with open(filename, 'r', encoding="latin-1") as f: lines = f.readlines() # Get lines as a list of strings lines = list(map(str.strip, lines)) # Remove /n characters lines = list(filter(None, lines)) # Remove empty strings return lines def get_df_from_genre(path, genre): files = glob.glob(path + genre + "/*.txt") titles = [] subtitles = [] bodies = [] for f in files: lines = read_and_split_file(f) titles.append(lines[0]) # First line is the title subtitles.append(lines[1]) # Second line is the subtitle bodies.append(' '.join(lines[2:])) # Combine all the rest return(pd.DataFrame({ 'genre': genre, 'title': titles, 'subtitle': subtitles, 'body': bodies }) ) final_df = pd.concat([get_df_from_genre(base_path, g) for g in genres]) final_df

我们使用*操作符和glob来获得所有可能的以.txt结尾的文件名。注意,你可以使用pd.concat将多个数据帧串联起来。运行这段代码,我们得到了以下输出。

🗄数据库 大多数组织将其关键业务数据存储在Postgres或MySQL这样的关系型数据库中,你需要知道结构化查询语言(SQL)来访问或更新存储在那里的数据。数据库有很多优点,比如数据的规范化,可以让你的工作更有效率。

SQLite SQLite是一个嵌入式数据库,以单个文件的形式存储,所以它是一个开始测试查询的好地方。这里我们将展示一个连接到Chinook数据库的SQLite文件的例子。 import pandas as pd import sqlite3 as sql conn = sql.connect('/Users/johnreid/Downloads/chinook.db') # First pattern - turn query directly into dataframe: df1 = pd.read_sql_query("SELECT * FROM invoice", conn) # Second pattern - get row-level data, but no column names cur = conn.cursor() results = cur.execute("SELECT * FROM invoice LIMIT 5").fetchall() df2 = pd.DataFrame(results)

如果你很好奇,可以在这里阅读我关于使用SQL构建交互式仪表盘的完整教程。 使用SQL和Datapane建立一个交互式Python仪表盘 towardsdatascience.com

远程数据库 连接到远程数据库,如Postgres、Redshift或SQLServer,大多使用相同的语法,但需要访问凭证。为了安全起见,最好将这些凭证存储在一个配置文件中,并将其加载到你的Python脚本中。你可以用以下信息创建一个单独的.py文件。 host = "localhost" database= "suppliers" user = "postgres" password = "SecurePas$1" and then import it into your Python script as follows (you’ll also need the psychopg2 library): import psycopg2 import config conn = psycopg2.connect( host=config.host, database=config.database, user=config.user, password=config.password) df1 = pd.read_sql_query("SELECT * FROM invoice", conn)

确保你的config.py文件安全,不要把它上传到其他地方--你可以把它添加到你的.gitignore中,确保它不会被包含在git提交中。

SQLAlchemy 如果你想用更 "pythonic "的方式来查询数据库,可以试试SQLAlchemy库,它是一个对象-关系-映射器。它通常用于应用程序,这样开发人员就不必写纯SQL来更新他们的数据库,但你也可以用它来查询数据。下面是一个使用同一个Chinook音乐商店数据库的例子。 import sqlalchemy as db engine = db.create_engine('sqlite:///chinook.db') connection = engine.connect() metadata = db.MetaData() invoice = db.Table('invoice', metadata, autoload=True, autoload_with=engine) # Get the first 10 invoices from the USA query = (db.select([invoice]) .filter_by(billing_country = 'USA') .limit(10) ) df = pd.read_sql(query, engine)

在这段代码中,我们连接到数据库,然后在SQLAlchemy中设置了一些表和元数据。一旦定义好,我们就可以用更 "pythonic "的方式写一个查询,并将结果直接读取到Pandas数据框中。运行这段代码可以得到以下输出。

📶 APIs 有时你需要从你公司使用的特定平台访问数据,比如Hubspot、Twitter或Trello。这些平台通常有一个公共的API,你可以直接在你的Python环境中提取数据。

基本的想法是你发送一个请求(可能包括查询参数和访问证书)到一个端点。该端点将返回一个响应代码和你要求的数据(希望如此)。你需要看一下API文档,以了解有哪些数据字段可用。数据通常会以JSON格式返回,这允许深度嵌套数据。

没有凭证 让我们用OpenNotify API做一个最小的例子,它跟踪目前在太空中的所有人员。 import requests response = requests.get("http://api.open-notify.org/astros.json") print(response.status_code) print(response.json()) res = pd.DataFrame(response.json()["people"]) res.head()

响应代码告诉你API调用的结果 - 根据Dataquest,最常见的是。 200:一切顺利,结果已经返回(如果有的话)。 301:服务器正在将你重定向到一个不同的端点。这可能发生在一个公司转换域名,或者一个终端名称被改变的时候。 400:服务器认为你提出了一个错误的请求。这可能发生在你没有发送正确的数据时,以及其他情况。 403: 你试图访问的资源是被禁止的:你没有正确的权限来查看它。 404: 你试图访问的资源在服务器上没有找到。 503: 服务器没有准备好处理该请求。

有凭证和查询参数 有时你可能需要从API获得更具体的信息,或者必须进行认证。有几种方法可以做到这一点,然而最常见的方法之一是向你的请求添加URL参数。

有时你可能需要从API获得更具体的信息,或者必须进行认证。有几种方法可以做到这一点,但其中最常见的是在你的请求中添加URL参数。 让我们假设我们有一个config.pyfile,里面有我们的API密钥。

personal_api_key = "wouldntyouliketoknow"

import config import pandas as pd import requests parameters = { "personal_api_key": config.personal_api_key, "date": "2021-09-22" } response = requests.get(url, params = parameters)

print(response.status_code) print(response.json())

res = pd.DataFrame(response.json()["people"]) res.head()

代码块

如果你不想处理JSON,你可以尝试为该API搜索一个Python库--这些通常是开源的,由公司或第三方维护。

📚 数据集访问库 如果你需要一些参考数据来进行比较或增加背景,怎么办?有很多库可以直接将公共数据集下载到你的环境中--就像从API中提取数据,而不必管理所有额外的复杂性。

Pandas_datareader Pandas_datareader是一种将数据从互联网上拉到Python环境中的好方法。它特别适用于金融数据,但也有一些世界银行的数据资源。要获得Zoom公司过去几年的每日股价,请尝试以下方法。 from pandas_datareader import data import datetime as dt zm = data.DataReader( "ZM"。 start='2019-1-1', end=dt.datetime.today(), data_source='yahoo' ).reset_index() zm.head()

运行这段代码,我们得到了以下输出(待补充)

DataCommons Datacommons是谷歌的一个项目,提供对标准化和清洁的公共数据集的访问。底层数据以图形格式表示,使得查询和连接来自许多不同数据源的数据变得非常容易,例如,美国人口普查、世界银行、维基百科、疾病控制中心等等。下面是一个基本的例子。 pip install datacommons datacommons_pandas --upgrade --quiet import datacommons_pandas as dc import pandas as pd city_dcids = dc.get_property_values(["CDC500_City"], "member", limit=500)["CDC500_City"] cdc500_df = dc.build_multivariate_dataframe( city_dcids, ["Percent_Person_Obesity", # Prevalence of obesity from CDC "Median_Income_Person", "Median_Age_Person", "UnemploymentRate_Person", # Unemployment rate from BLS "Count_Person_BelowPovertyLevelInThePast12Months", # Persons living below the poverty line from Census "Count_Person", # Total population from Census ], ) cdc500_df.info()

pip install datacommons datacommons_pandas --upgrade --quiet import datacommons_pandas as dc import pandas as pd city_dcids = dc.get_property_values(["CDC500_City"], "member", limit=500)["CDC500_City"] cdc500_df = dc.build_multivariate_dataframe( city_dcids, ["Percent_Person_Obesity", # 来自CDC的肥胖症流行率 "中位数收入人", "年龄中位数", "UnemploymentRate_Person", # BLS的失业率 "Count_Person_BelowPovertyLevelInThePast12Months", # 生活在贫困线以下的人,来自人口普查 "Count_Person", # 人口普查中的总人口 ], ) cdc500_df.info()

运行这段代码,我们可以得到以下结果。

如果你想学习如何使用DataCommons,请在这里阅读我的完整教程。 探索DataCommons--为谷歌搜索提供动力的API 访问公共可用数据集的新范式 towardsdatascience.com

PyTrends (Google Trends) PyTrends是一个非官方但很有用的查询Google Trends数据的库,这里有一个简单的例子。 import pandas as pd from pytrends.request import TrendReq pytrends = TrendReq() keywords = ["oat milk", "soy milk", "almond milk"] pytrends.build_payload(keywords, cat=0, geo='', gprop='') # Get data from the last 5 years top_queries = pytrends.interest_over_time()[keywords] top_queries.head()

运行这段代码,我们得到了以下输出。

Kaggle Kaggle是一个数据科学社区,为学习Python提供了大量的数据集和竞赛。你可以通过他们的命令行界面下载一些数据集来玩玩(注意:你需要注册一个Kaggle账户)。例如,如果我们想下载一些Zillow的经济数据,我们可以在终端运行以下命令(Jupyter用户:在你的Python代码中用!替换$)。 $ pip install kaggle $ export KAGGLE_USERNAME=datadinosaur $ export KAGGLE_KEY=xxxxxxxxxxxxxx $ kaggle datasets download zillow/zecon $ unzip zecon.zip

这将下载一个数据集的压缩文件,然后解压。在这里,你可以用Pandas把它们作为本地文件打开。

import pandas as pd csv_file = "/Users/johnreid/Downloads/Zip_time_series.csv" df_from_csv = pd.read_csv(csv_file) df_from_csv.info()

想了解更多,请查看Kaggle API文档。

结论

你成功了! 现在你可以用你新发现的能力来访问多个数据源,并用pd.merge或pd.concat将它们连接起来,然后用Altair、Pandas或Folium等交互式库将它们可视化。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有