使用 Pandas 进行数据整理
介绍
数据整理是数据科学和分析中的关键任务之一,其中包括如下操作:
- 数据排序:按升序或降序重新排列值。
- 数据过滤:创建可用数据的子集。
- 数据缩减:消除或替换不需要的值。
- 数据访问:读取或写入数据文件。
- 数据处理:对特定值执行聚合、统计和类似的操作。
Pandas 是一个开源库,专门为数据科学和分析而开发。它基于Numpy(用于处理表格形式的数字数据)包构建,并具有内置数据结构,以简化数据操作过程,即数据处理/整理。
先决条件
执行以下命令安装pandas:
$ pip install pandas
在 Python 脚本中导入 pandas 如下:
import pandas
要安装最新版本的 pandas,请确保您拥有最新版本的pip。使用以下命令在终端 (Mac/Linux) 上升级 pip 包:
$ pip install --upgrade pip
在 Windows 上
python -m pip install -U pip
Pandas 中的数据结构
在数据分析过程中,通常需要存储系列或表格数据。这可以使用列表来完成,但 Python 列表使用指针和 Python 对象存储数据,这在内存和性能方面效率很低。Pandas 与自定义数据结构捆绑在一起,可以有效地存储和处理数据。
有两种数据结构:
- 系列:系列就像一维索引/标记数组,可以使用Series()函数通过将列表/字典/数组的对象作为参数传递给Series()函数来创建。每个系列对象都有关联的数据类型。
对象数据类型用于异构数据,例如字符串和整数列表。
import pandas as pd # creating alias as pd
nums = pd.Series([1, 2, 3]) # list
nums.head() # to print series
print(nums[2]) # print value at index 2
输出:
0 1
1 2
2 3
dtype: int64
3
- 可以通过将列表传递给索引属性来定制索引:
custom_index = pd.Series(['1', float('NaN'), 3], index=['a', 11, 12]) # NaN means not a number
custom_index.head()
# custom_index = pd.Series({'a':'1', 11:float('NaN'), 12:3}) # using dictionary
输出:
a 1
11 NaN
12 3
dtype: object
- DataFrame: DataFrame 以表格形式存储数据。DataFrame 是一种二维数据结构,将数据组织成行和列。可以使用列表、字典或 numpy 数组创建 dataFrame,如下所示:
# using list
product_data=[['e-book', 2000], ['plants', 6000], ['Pencil', 3000]] # 2d list, similar to 2d array
indexes=[1,2,3]
columns_name=['product', 'unit_sold']
product_df = pd.DataFrame(data=product_data, index=indexes, columns=columns_name)
print(product_df)
# using dictionaries
product_data={'product': ['e-book', 'plants', 'Pencil'], 'unit_sold': [2000, 5000, 3000]}
product_df = pd.DataFrame(data=product_data)
print(product_df)
# using numpy array
products = np.array([['','product','unit_sold'], [1, 'E-book', 2000],[2, 'Plants', 6000], [3, 'Pencil', 3000]])
product_pf = pd.DataFrame(data=products[1:,1:], # [1:,1:] from first row till end, from first column till end
index=products[1:,0], # [1:,0] from first row till end, only first column
columns=products[0,1:]) # [1:,0] only first row, form first column till end
print(product_pf) # output is same as of first case
输出:
product unit_sold
1 E-book 2000
2 Plants 6000
3 Pencil 3000
product unit_sold
0 E-book 2000
1 Plants 5000
2 Pencil 3000
使用 numpy,索引和列属性的值使用数组切片语法提供。
在 Dataframe/Series 对象上使用describe()来获取数值摘要以及最小值、最大值、标准差、计数和百分比板等分析数据。
注意: 如果列的数据类型是字符串, describe()将跳过分析信息,例如,numpy 的数据框在第一个索引处有一个空字符串。
索引和标签
- 行索引:默认情况下,第一列为行索引,从零开始。还可以通过将索引列表传递给索引属性来自定义索引。Pandas 具有iloc[int_index_value]函数,该函数只能采用int值来获取行,如下所示:
row = product_df.iloc[2] # fetch third row
rows = product_df.iloc[0:2] # fetch rows from first till third but not third
如果索引包含字符串值,则使用loc[label]或ix[label],其中loc搜索匹配的值,ix首先使用loc,如果失败,则回退到iloc。
还可以使用data_frame.set_index('index_based_column_name')将列定义为索引列,并且可以使用dataframe.reset_index重置。
- 列名:列名可用作标签,可以通过将名称列表传递给列属性来修改。列名在执行选择、算术或搜索操作时非常有用,例如:
product_df['product'] # return column as series object
gt_products = product_df['unit_sold'] > 2500 # return a series object of bool, for values greater than 2500
products
# calculate next month target by increasing 10% and store the resultant series object in product_df under next_target column
product_df['next_target'] = product_df['unit_sold'] + ( product_df['unit_sold'] * 10)/100
列值和行值均可用于使用at或iat函数获取特定值,如下所示:
product_df.at['2','product']
如果索引包含任何非整数值,那么索引的类型将是一个对象,并且应该用作像“2”这样的字符串。
导入或导出数据
数据是分析不可或缺的一部分,通常存储在文件(CSV、Excel、JSON、XML、SQL 等)中。因此,pandas 内置支持将文件中的数据加载为数据框。CSV 是创建数据集最常用的格式,网络上有许多免费数据集。让我们使用 pandas导入每日节目嘉宾数据集,如下所示:
下载每日秀嘉宾文件并将其保存在存储 Python 脚本的同一文件夹中,或者您可以使用 CSV 文件的相对路径。
guest_list_df = pd.read_csv('daily_show_guests.csv', sep=',') # separator can also be changed
print(guest_list_df.head(5))
要从其他格式读取数据,请使用read_sql、read_json和read_excel函数。要读取特定或多个工作表,请使用pd.read_excel('file_name.xlsx', sheet_name='Sheet1')。
Pandas 需要xlrd模块来读取 excel 文件,因此请确保按如下方式安装它:
$ pip install xlrd
数据处理
数据操作包括对数据进行排序、合并、分组和更改。Pandas 提供了多种功能来操作数据:
排序
要按升序(默认)或降序对数据框进行排序,请使用sort_values函数。它默认使用<font
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~