3.4 Pandas高级语法

本文主要内容:

一、重塑Pandas DataFrame

重塑DataFrame对其进行转换,以便生成的结构使其更适合您的数据分析。换句话说,重塑并不是要关注格式化DataFrame中包含的值,而是更多地关注转换它的形状。

有多种重塑的方式:旋转、堆叠和拆分以及融解。

1. 旋转DataFrame

您可以使用该pivot()函数从原始表中创建新的派生表。使用该函数时,可以传递三个参数:

  1. values:此参数指定在DataFrame数据中的结果。
  2. columns:传递给此参数的数据将成为结果表中的列。
  3. index:传递给此参数的数据将成为结果表中的索引。
import pandas as pd products = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'], 'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'], 'price': [11.42, 23.50, 19.99, 15.95, 55.75, 111.55], 'testscore': [4, 3, 5, 7, 5, 8]}) print("products:\n", products) # 使用pivot()来旋转DataFrame pivot_products = products.pivot(index='category', columns='store', values='price') print("\npivot_products:\n", pivot_products)

运行后输出:

products:
         category    store   price  testscore
0       Cleaning  Walmart   11.42          4
1       Cleaning      Dia   23.50          3
2  Entertainment  Walmart   19.99          5
3  Entertainment     Fnac   15.95          7
4           Tech      Dia   55.75          5
5           Tech  Walmart  111.55          8

pivot_products:
 store            Dia   Fnac  Walmart
category                            
Cleaning       23.50    NaN    11.42
Entertainment    NaN  15.95    19.99
Tech           55.75    NaN   111.55

如果没有传递参数values,则将按多列进行转换。紧接着上面的示例在最后加上下面的代码:

# 使用pivot()来旋转DataFrame pivot_products2 = products.pivot(index='category', columns='store') print("\npivot_products2:\n", pivot_products2)

输出:

pivot_products2:
                price                testscore             
store            Dia   Fnac Walmart       Dia Fnac Walmart
category                                                  
Cleaning       23.50    NaN   11.42       3.0  NaN     4.0
Entertainment    NaN  15.95   19.99       NaN  7.0     5.0
Tech           55.75    NaN  111.55       5.0  NaN     8.0

2. 融解DataFrame

如果您的数据具有一个或多个作为列的标识符,而所有其他列都被视为测量变量,那么请使用melt函数。

这些测量变量都未转动到行轴,也就是说,当测量变量分布在DataFrame的宽度上时,melt()将确保它们将被放置在它的高度。或者,换句话说,您的DataFrame现在将变得更长而不是更宽。

因此,您有两个非标识符的列,即“变量”和“值”。

让我们用一个例子来说明这一点:

import pandas as pd people = pd.DataFrame({'FirstName': ['John', 'Jane'], 'LastName': ['Doe', 'Austen'], 'BloodType': ['A-', 'B+'], 'Weight': [90, 64]}) print("people:\n", people) # people DataFrame使用melt()函数 melt_people = pd.melt(people, id_vars=['FirstName', 'LastName'], var_name='measurements') print("\nmelt_people:\n", melt_people)

输出:

people:
   FirstName LastName BloodType  Weight
0      John      Doe        A-      90
1      Jane   Austen        B+      64

melt_people:
   FirstName LastName measurements value
0      John      Doe    BloodType    A-
1      Jane   Austen    BloodType    B+
2      John      Doe       Weight    90
3      Jane   Austen       Weight    64

二、Pandas DataFrame输出到文件

使用Pandas完成数据修改和操作后,您可能希望将DataFrame导出为其他格式。下面介绍两种输出DataFrame的方法:CSV、Excel文件。

1. DataFrame输出到CSV文件

要将DataFrame写入到CSV文件,可以使用to_csv()

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) print(df, "\n") df.to_csv('myDataFrame.csv')

运行后,在当前文件的目录中将会新建一个文件’myDataFrame.csv’,我们打开它,内容如下:

FBB35DA2-5936-42C5-900A-2ADFAE2E40A9

可以看到输出到CSV文件的数据看起来不并不是很直观,怎么办呢?

这段代码看起来很简单,但这也会是大家遇到困难的地方,因为会对数据输出有特定的要求。也许您不希望逗号作为分隔符,或者您想要指定特定的编码等。

别担心!您可以传递一些额外的参数,to_csv()以确保您的数据以您希望的方式输出!

2. DataFrame写入Excel

与将DataFrame输出为CSV文件所做的操作类似,可以使用to_excel()将表编写到Excel。

需要先安装openpyxl模块:

pip install openpyxl

具体代码如下:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) writer = pd.ExcelWriter('myDataFrame.xlsx') df.to_excel(writer, 'DataFrame') writer.save()

运行后同样会在当前python文件的目录中新生成一个’myDataFrame.xlsx’文件,打开后内容如下:

D084934A-2C9C-463D-93AE-5CB061877600

另外还有很多额外的参数,如startcolstartrow等,若要满足更多输出数据的需求,请在此页面查阅完整参数。

三. 读取文件到Pandas DataFrame

1. 读取CSV文件到Pandas DataFrame

该功能很简单,使用read_csv()函数即可,示例代码如下:

import pandas as pd df = pd.read_csv('myDataFrame.csv') print(df)

运行后输出如下:

BD24FAF8-B54E-4F1D-80FB-B514902B2874

发现生产的df对象,并不是我们所需要的。因此,我们在读取文件数据时需要设置相应的参数,下面我们来添加两个参数:

代码如下:

df = pd.read_csv('myDataFrame.csv', sep='\t', index_col=0)

再次运行后输出如下:

0864FCCD-6410-4F0C-9DEF-A8DA5C0650AB

2. 读取Excel文件到Pandas DataFrame

读取Excel与读取CSV文件类似,使用read_excel()函数即可,示例代码如下:

import pandas as pd df = pd.read_excel('myDataFrame.xlsx') print(df)

输出如下:

   Unnamed: 0  A  B  C
0           0  1  2  3
1           1  4  5  6
2           2  7  8  9

同样,我们设置index_col参数指定Dataframe的行索引。修改为:

df = pd.read_excel('myDataFrame.xlsx', index_col=0)

输出如下:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

总结

现在我们已经成功完成了操作数据所需的基本功能,另外对于Pandas数据分析包的其它语法大家可以到Pandas官方文档进行了解,后面我们将会有数据分析和机器学习的项目对其进行应用。

若有疑问,欢迎联系作者(微信:lixu1770105)。